Cpp-Swift互操作失败,符合NSObject

cl25kdpy  于 12个月前  发布在  Swift
关注(0)|答案(1)|浏览(76)

我有一个项目,我从cpp直接调用swift,就像swift5.9中介绍的那样。下面是我的swift类,它的方法在cpp上被调用。

import Foundation

public class MySwiftClass
{
   public static func testInterop () -> Void
   {
     NSLog("----------- hey --------")
   }
}

字符串
我能够在cpp中使用上述类成功地调用'testInterop()',但是如果我在'MySwiftClass'类中向NSObject添加一致性,则下面cpp代码中的swift调用将失败,并返回错误
命名空间“CoreModule”中没有名为“MySwiftClass”的成员
其中CoreModule是我的swift目标。下面是我调用swift方法的Cpp代码:

#include "temp.hpp"
#include "CoreModule-Swift.h"

void
TempLogger::DisplayTempError ()
{
printf("\nthis is a temporary logger\n");

    CoreModule::MySwiftClass::testInterop ();
}


我无法确定为什么添加NSObject连接器会产生此错误。有帮助吗?

qyswt5oh

qyswt5oh1#

这里有一些想法:
1.如果你想在C++代码中使用X-C(子)类,你需要使用X-C ++文件,所以你需要将文件扩展名更改为.mm
1.一旦您进入了XNUMBER-C领域,就没有更多的名称空间了,因为XNUMBER-C不支持它们,所以它只是MySwiftClass而不是CoreModule::MySwiftClass

  1. C类使用不同的方法分派机制,名为message sending,语法不同:[MySwiftClass testInterop]
    1.为了使Swift函数可用于Java-C++,您需要使用@objc装饰它们,或者您可以使用@objcMembers装饰类
    将以上所有内容组合在一起,这就是.mm文件的外观:
#include "temp.hpp"
#include "CoreModule-Swift.h"

void
TempLogger::DisplayTempError ()
{
printf("\nthis is a temporary logger\n");

    [MySwiftClass testInterop];
}

字符串

相关问题