NS\u SWIFT\u用于将C函数作为类扩展导入的名称
我有两个C函数:NS\u SWIFT\u用于将C函数作为类扩展导入的名称,swift,swift3,objective-c-swift-bridge,Swift,Swift3,Objective C Swift Bridge,我有两个C函数: extern UIColor* LNRandomDarkColor(); extern UIColor* LNRandomLightColor(); 作为练习,我尝试将它们作为扩展方法导入Swift,以UIColor 以下是2016年WWDC上苹果公司的“Swift新功能”演示: void CGContextFillPath(CGContextRef) NS_SWIFT_NAME(CGContext.fillPath(self:)); 我试图对我的函数进行类似的注释: e
extern UIColor* LNRandomDarkColor();
extern UIColor* LNRandomLightColor();
作为练习,我尝试将它们作为扩展方法导入Swift,以UIColor
以下是2016年WWDC上苹果公司的“Swift新功能”演示:
void CGContextFillPath(CGContextRef) NS_SWIFT_NAME(CGContext.fillPath(self:));
我试图对我的函数进行类似的注释:
extern UIColor* LNRandomDarkColor() NS_SWIFT_NAME(UIColor.randomDarkColor());
extern UIColor* LNRandomLightColor() NS_SWIFT_NAME(UIColor.randomLightColor());
然而,我收到以下警告:
“swift_name”属性只能应用于函数声明
原型
我做错了什么
更新:为此问题打开。这是部分结果。下面的代码 –根据以下示例创建: – 汇编:
struct MyColor { };
UIColor * _Nonnull LNRandomDarkColor(void)
__attribute__((swift_name("MyColor.randomDarkColor()")));
并将C函数作为MyColor的静态成员函数导入
键入Swift:
let col = MyColor.randomDarkColor()
但我无法将该函数作为的成员函数导入
任何现有类型,如UIColor
:
UIColor * _Nonnull LNRandomDarkColor(void)
__attribute__((swift_name("UIColor.randomDarkColor()")));
// warning: imported declaration 'LNRandomDarkColor' could not be mapped to 'UIColor.randomDarkColor()'
(并且UIColor.randomDarkColor()
不编译)。我不知道这是故意的限制还是错误
使用NS\u SWIFT\u NAME
宏而不是SWIFT\u NAME
属性也不起作用:
UIColor * _Nonnull LNRandomDarkColor(void)
NS_SWIFT_NAME("MyColor.randomDarkColor()");
// warning: parameter of 'swift_name' attribute must be a Swift function name string
我很确定,通过使用extern,您会发现它依赖于链接器来指向实际的实现。正因为如此,我不确定它是否能以您尝试使用它的方式工作。关于这方面的文档非常少,而且像往常一样,任何与Swift相关的、像地狱一样的bug。谢谢你的努力!是
structmycolor{}代码>必填项,或者进口商是否可以推断?typedef
可以工作吗,其中MyColor
是UIColor
的“类型别名”?不是在我的Mac旁边测试我自己。如果这是如此有限,将打开一个bug。另外,\uuuu属性((swift\u name(“”))
和NS\u swift\u name
之间有什么区别?为什么会存在这种重复?@LeoNatan:需要定义类型,而我无法使它与类型别名一起工作NS_SWIFT_名称应该与我从宏扩展中看到的相同,但这就是我观察到的顺便说一句,导入为下标也没有工作,我最后一次检查,不知道现在是否是固定的。如果你报告了一个错误,请在这里添加错误。嗯,根据,它是一样的。应该是NS\u SWIFT\u NAME(MyColor.randomDarkColor())代码>我将添加错误报告。如果没有其他消息,我明天就去报案。