我有两个C函数:
extern UIColor* LNRandomDarkColor();
extern UIColor* LNRandomLightColor();
作为练习,我尝试将它们作为UIColor
的扩展方法导入Swift。
关注Apple" Swift的新功能"来自WWDC 2016的演示示例:
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' attribute只能应用于函数声明 与原型
我在这里做错了什么?
更新:针对此问题打开SR-2999。
答案 0 :(得分:3)
这是部分结果。以下代码 - 根据以下示例创建 SE-0044 Import as member - 编译:
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_SWIFT_NAME
宏代替swift_name
属性也不起作用:
UIColor * _Nonnull LNRandomDarkColor(void)
NS_SWIFT_NAME("MyColor.randomDarkColor()");
// warning: parameter of 'swift_name' attribute must be a Swift function name string