【问题标题】:UIColor swift extension w/ class access from Objective-CUIColor swift 扩展,带有来自 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?

标签: objective-c swift swift-extensions bridging


【解决方案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+
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多