无法从框架访问@IBInspectable属性

时间:2019-01-08 20:43:15

标签: frameworks swift4.2

我正在打包我日常使用的扩展程序。 我正在UIView上提取此Extension,并将其放入框架中。

我进行了初始构建,并且在使用此框架的项目中,所有这些IBInspectable属性均不可访问。 以下是位于单独框架中的UIView扩展的代码。

public extension UIView {

    @IBInspectable public var cornerRadius: CGFloat {
        get {
            return self.layer.cornerRadius
        }

        set {
            self.layer.cornerRadius = newValue
        }
    }

    @IBInspectable public var borderWidth: CGFloat {
        get {
            return self.layer.borderWidth
        }

        set {
            self.layer.borderWidth = newValue
        }
    }

    @IBInspectable public var borderColor: UIColor? {
        get {
            guard let borderColor =  self.layer.borderColor else {
                return nil
            }
            return UIColor(cgColor: borderColor)
        }

        set {
            self.layer.borderColor = newValue?.cgColor
        }
    }

    @IBInspectable public var shadowColor: UIColor? {
        get {
            guard let shadowColor =  self.layer.shadowColor else {
                return nil
            }
            return UIColor(cgColor: shadowColor)
        }

        set {
            self.layer.shadowColor = newValue?.cgColor
        }
    }

    @IBInspectable public var shadowOffset: CGSize {
        get {
            return self.layer.shadowOffset
        }

        set {
            self.layer.shadowOffset = newValue
        }
    }

    @IBInspectable public var shadowRadius: CGFloat {
        get {
            return self.layer.shadowRadius
        }

        set {
            self.layer.shadowRadius = newValue
        }
    }

    @IBInspectable public var shadowOpacity: CGFloat {
        get {
            return CGFloat(self.layer.shadowOpacity)
        }

        set {
            self.layer.shadowOpacity = Float(newValue)
        }
    }
}

任何想法,我可能做错了什么?

1 个答案:

答案 0 :(得分:0)

使用open而不是public作为访问说明符来访问类和Variable在模块外部。

open extension UIView {

    @IBInspectable open var cornerRadius: CGFloat {
        get {
            return self.layer.cornerRadius
        }

        set {
            self.layer.cornerRadius = newValue
        }
    }