Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NS\u SWIFT\u用于将C函数作为类扩展导入的名称_Swift_Swift3_Objective C Swift Bridge - Fatal编程技术网

NS\u SWIFT\u用于将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

我有两个C函数:

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())我将添加错误报告。如果没有其他消息,我明天就去报案。