Associated Object

// Associated Object// 动态添加成员变量。 直接添加成员变量是不允许的,利用 OC 的运行时和 KVC 特性,我们可以在运行时想一个对象添加值存储。// 利用 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("没有设置")

}

}

let a = MyClass()

print(a)

a.title = "Swifter.tips"

print(a.title) // Optional("Swifter.tips")

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容