UIColor swift 扩展,带有来自 Objective-C 的类访问
Posted
技术标签:
【中文标题】UIColor swift 扩展,带有来自 Objective-C 的类访问【英文标题】:UIColor swift extension w/ class access from Objective-C 【发布时间】:2018-03-16 18:02:53 【问题描述】:请问如何从objective-c 访问我的darkGray 颜色?
@objc
extension UIColor
@objc
public class Scheme1: NSObject
static var darkGray: UIColor!
return UIColor(red: 16.0/255.0, green: 16.0/255.0, blue: 19.0/255.0, alpha: 1.0)
【问题讨论】:
但是,你为什么要在 swift 扩展中使用objective-c? 【参考方案1】:假设您使用的是 Swift 4 的 @objc
推理,darkGray
必须声明为 @objc
:
@objc
extension UIColor
@objc
public class Scheme1: NSObject
@objc static var darkGray: UIColor!
return UIColor(red: 16.0/255.0, green: 16.0/255.0, blue: 19.0/255.0, alpha: 1.0)
您可以使用 Scheme1.darkGray
从 Objective-C 访问 darkGray
。 Objective-C 不支持嵌套类,所以Scheme1
在顶层导出。
如果你真的想从 Objective-C 以命名空间的方式访问 Scheme1
,你可以将 darkGray
设为实例属性并在扩展中存储 Scheme1
的实例:
@objc
extension UIColor
@objc
public class Scheme1: NSObject
@objc var darkGray: UIColor!
return UIColor(red: 16.0/255.0, green: 16.0/255.0, blue: 19.0/255.0, alpha: 1.0)
@objc public static var scheme1 = Scheme1()
您可以使用UIColor.scheme1.darkGray
访问darkGray
。
【讨论】:
绝妙的答案! 100% 有效.. 是的,Swift4+以上是关于UIColor swift 扩展,带有来自 Objective-C 的类访问的主要内容,如果未能解决你的问题,请参考以下文章