swift - NS_SWIFT_NAME 用于将 C 函数导入为类扩展

标签 swift swift3 objective-c-swift-bridge

我有两个 C 函数:

extern UIColor* LNRandomDarkColor();
extern UIColor* LNRandomLightColor();

作为练习,我尝试将它们作为 UIColor 的扩展方法导入到 Swift 中。

以下是 Apple 在 WWDC 2016 上的“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' attribute can only be applied to function declarations with prototypes

我在这里做错了什么?


更新:打开SR-2999对于这个问题。

最佳答案

这是部分结果。以下代码 – 从以下示例创建 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

关于swift - NS_SWIFT_NAME 用于将 C 函数导入为类扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40133453/

相关文章:

objective-c - 找不到 Swift 到 Objective C 的头文件

swift - 默认参数

ios - 游戏中心欢迎横幅不隐藏状态栏

objective-c - 在混合 objc/swift 模块中,Xcode 总是尝试包含模块本身

xcode - 错误: "Cannot assign to immutable expression of type ' Bool'"?

ios - 我如何继续使用 Swift 2.3 而不是 3.0,Xcode 已更新且无法再构建

objective-c - 无法从 Objective-C 访问 Swift 类型的属性

swift - 通过 UITabBarController 移动到选定索引后 UIView 为零

swift - 当需要 self 参数时,如何使用 #selector 调用另一个类中的函数?

ios - UIImageView 等待动画完成