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 的类访问的主要内容,如果未能解决你的问题,请参考以下文章

如何在现有 UIKit 类(如 UIColor)的扩展中添加初始化程序?

在 Swift 中使用 Obj-C 类扩展?

在 Swift 中使用 Obj-C 类扩展?

- (id) 来自 Swift 中的 Obj-C Lib?

Swift 扩展示例

如何在objective c框架中使用swift扩展