3 回答

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊
與Objective-C一樣,您無法將存儲(chǔ)的屬性添加到現(xiàn)有類中。如果您正在擴(kuò)展Objective-C類(UIView肯定是一個(gè)),您仍然可以使用關(guān)聯(lián)對(duì)象來模擬存儲(chǔ)的屬性:
對(duì)于Swift 1
import ObjectiveC
private var xoAssociationKey: UInt8 = 0
extension UIView {
var xo: PFObject! {
get {
return objc_getAssociatedObject(self, &xoAssociationKey) as? PFObject
}
set(newValue) {
objc_setAssociatedObject(self, &xoAssociationKey, newValue, objc_AssociationPolicy(OBJC_ASSOCIATION_RETAIN))
}
}
}
關(guān)聯(lián)鍵是一個(gè)指針,應(yīng)該是每個(gè)關(guān)聯(lián)的唯一指針。為此,我們創(chuàng)建一個(gè)私有全局變量,并使用它的內(nèi)存地址作為&運(yùn)算符的鍵。有關(guān)如何在Swift中處理指針的詳細(xì)信息,請(qǐng)參閱使用Swift with Cocoa和Objective-C 。
更新為Swift 2和3
import ObjectiveC
private var xoAssociationKey: UInt8 = 0
extension UIView {
var xo: PFObject! {
get {
return objc_getAssociatedObject(self, &xoAssociationKey) as? PFObject
}
set(newValue) {
objc_setAssociatedObject(self, &xoAssociationKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
}
}
}
更新為Swift 4
在Swift 4中,它更加簡單。Holder結(jié)構(gòu)將包含我們的計(jì)算屬性將向世界公開的私有值,從而產(chǎn)生存儲(chǔ)屬性行為的錯(cuò)覺。
資源
extension UIViewController {
struct Holder {
static var _myComputedProperty:Bool = false
}
var myComputedProperty:Bool {
get {
return Holder._myComputedProperty
}
set(newValue) {
Holder._myComputedProperty = newValue
}
}
}
- 3 回答
- 0 關(guān)注
- 863 瀏覽
添加回答
舉報(bào)