给Extension添加存储属性

我们都知道Extension中可以添加计算属性,但不能添加存储属性.

对 我们可以使用runtime

1
2
3
4
5
6
7
8
9
10
11
12
private var nameKey: Void?
extension UIView {
// 给UIView添加一个name属性
var name: String? {
get {
return objc_getAssociatedObject(self, &nameKey) as? String
}
set {
objc_setAssociatedObject(self, &nameKey, newValue, .OBJC_ASSOCIATION_COPY_NONATOMIC)
}
}
}