我有一个项目,我从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连接器会产生此错误。有帮助吗?
1条答案
按热度按时间qyswt5oh1#
这里有一些想法:
1.如果你想在C++代码中使用X-C(子)类,你需要使用X-C ++文件,所以你需要将文件扩展名更改为
.mm
1.一旦您进入了XNUMBER-C领域,就没有更多的名称空间了,因为XNUMBER-C不支持它们,所以它只是
MySwiftClass
而不是CoreModule::MySwiftClass
[MySwiftClass testInterop]
1.为了使Swift函数可用于Java-C++,您需要使用
@objc
装饰它们,或者您可以使用@objcMembers
装饰类将以上所有内容组合在一起,这就是
.mm
文件的外观:字符串