3 回答

TA貢獻1809條經驗 獲得超8個贊
與Objective-C一樣,您無法將存儲的屬性添加到現有類中。如果您正在擴展Objective-C類(UIView肯定是一個),您仍然可以使用關聯對象來模擬存儲的屬性:
對于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))
}
}
}
關聯鍵是一個指針,應該是每個關聯的唯一指針。為此,我們創建一個私有全局變量,并使用它的內存地址作為&運算符的鍵。有關如何在Swift中處理指針的詳細信息,請參閱使用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結構將包含我們的計算屬性將向世界公開的私有值,從而產生存儲屬性行為的錯覺。
資源
extension UIViewController {
struct Holder {
static var _myComputedProperty:Bool = false
}
var myComputedProperty:Bool {
get {
return Holder._myComputedProperty
}
set(newValue) {
Holder._myComputedProperty = newValue
}
}
}
- 3 回答
- 0 關注
- 864 瀏覽
添加回答
舉報