1. 程式人生 > >Swift給系統的類擴充套件屬性

Swift給系統的類擴充套件屬性

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) } } }