如何在Swift擴展中添加存儲屬性

.一般而言,swift的擴展Extension只能添加計算屬性,不能添加存儲屬性。當然,如果利用run time也可以實現(xiàn)extension添加存儲屬性的效果.
.如我給UIButton這個類添加了如下屬性:

private var key: Void?
func createImageWithColor(_ color: UIColor) -> UIImage? {
let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0)
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
context?.setFillColor(color.cgColor)
context?.fill(rect)
let theImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return theImage
}
extension UIButton {
@IBInspectable var normalColor: UIColor? {
    get {
        return objc_getAssociatedObject(self, &key) as? UIColor
    }
    set(newValue) {
        objc_setAssociatedObject(self, &key, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        setBackGroundColor(normalColor ?? UIColor.white, state: UIControlState())
    }
}

@IBInspectable var highlightedColor: UIColor? {
    get {
        return objc_getAssociatedObject(self, &key) as? UIColor
    }
    set(newValue) {
        objc_setAssociatedObject(self, &key, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        setBackGroundColor(highlightedColor ?? UIColor.lightGray, state: .highlighted)
    }
}

fileprivate func setBackGroundColor(_ backGroundColor: UIColor, state: UIControlState) {
    let image = createImageWithColor(backGroundColor)
    setBackgroundImage(image, for: state)
   }
  }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,323評論 4 61
  • 早上我開鍋拿饅頭的時候,鍋蓋隨手放在內(nèi)側(cè)滴小鍋旁邊,鍋蓋倒了,把灶臺邊上的碗和勺子擠下去。。嘩啦。。碎了。。 好吧...
    小豬天堂閱讀 312評論 2 1
  • ?
    丁藝琳閱讀 260評論 0 0

友情鏈接更多精彩內(nèi)容