ios - 如何在 Swift 中调用 Objective-C 类别方法

标签 ios objective-c swift

如何在 Swift 中调用这样的 Objective-C 类别方法?

+(UIColor*)colorWithHexString:(NSString*)hex alpha:(float)alpha;

最佳答案

编译器会自动查找常见的 ObjC 命名模式,并用 Swift 模式替换它们。返回类实例的 ObjC 类方法(并以某种方式命名,看起来像)变成了 Swift 便利初始化器。

如果您有 ObjC 方法(由自定义类别定义):

 + (UIColor *)colorWithHexString:(NSString *)hex alpha:(float)alpha;

编译器生成 Swift 声明:

convenience init(hexString: String?, alpha: CFloat)

你这样调用它:

let color = UIColor(hexString: "#ffffff", alpha: 1.0)

在 Swift 2.0 或更高版本中,您可以使用 NS_SWIFT_NAME 宏将与命名模式不匹配的 ObjC 工厂方法作为初始化程序导入到 Swift 中。例如:

@interface UIColor(Hex)
+ (UIColor *)hexColorWithString:(NSString *)string
NS_SWIFT_NAME(init(hexString:));
@end

// imports as
extension UIColor {
    init(hexString: String)
}

关于ios - 如何在 Swift 中调用 Objective-C 类别方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24006264/

相关文章:

ios - 无法构建模块 UIKit

iphone - 在 prefix.pch IOS 中覆盖 NSLOG

ios - NSURLConnection initWithRequest 已弃用

ios - 来自播放列表项的 YouTube Objective-C API 视频 url

objective-c - 如何在用户的语言环境中获取星期几的名称?

ios - Swift AVPlayerItem 完成后关闭

ios - 上一个单选按钮状态未清除 objective-c

ios - Swift - 从视频中删除音频

ios - 搜索处于事件状态时 didSelectRowAt indexPath 函数不起作用

ios - 在动态框架内生成框架文件夹