// Associated Object// 動(dòng)態(tài)添加成員變量。 直接添加成員變量是不允許的,利用 OC 的運(yùn)行時(shí)和 KVC 特性,我們可以在運(yùn)行時(shí)想一個(gè)對(duì)象添加值存儲(chǔ)。// 利用 property 配合 Associated Object // 添加 和 獲得的方法/*func objc_getAssociatedObject(object: AnyObject!,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? key: UnsafePointer) -> AnyObject!func objc_setAssociatedObject(object: AnyObject!,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? key: UnsafePointer,
value: AnyObject!,
policy: objc_AssociationPolicy)
*/
class MyClass{ }
private var titleKey: Void?
extension MyClass {
var title : String? {
get{
return objc_getAssociatedObject(self, &titleKey) as? String
}
set{
objc_setAssociatedObject(self, &titleKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}
}
// 測試
func printTitle(_ input: MyClass){
if let title = input.title {
print("Title: \(title)")
} else {
print("沒有設(shè)置")
}
}
let a = MyClass()
print(a)
a.title = "Swifter.tips"
print(a.title) // Optional("Swifter.tips")