Swift給系統的類擴充套件屬性
阿新 • • 發佈:2019-02-14
OC的類別和擴充套件一般用來給類擴充套件方法,但有時我們需要給系統的類加一個額外的屬性,這需要用到runtime機制。
Runtime是一套底層的C語言API(包含強大的C語言資料型別和函式)OC程式碼都是基於Runtime實現的,即編寫的OC程式碼最終都會轉成Runtime的程式碼
Runtime的作用:
1、獲取類的私有變數
2、動態產生類,成員變數和方法
3、動態修改類,成員變數和方法
4、對換兩個方法的實現(swizzle)
同樣,在Swift中使用extension也可以為系統的類擴充套件屬性:
private var key: Void?
extension UIViewController {
@IBInspectable var laxTabBarController: LAXTabBarController? {
get {
return objc_getAssociatedObject(self, &key) as? LAXTabBarController
}
set(newValue) {
objc_setAssociatedObject(self, &key, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}
}