Association objects (Associated Objects)
extension Uiviewcontroller {Private structAssociatedkeys {Staticvar descriptivename ="Nsh_descriptivename"} var descriptivename:string? { Get { returnObjc_getassociatedobject (self, &associatedkeys.descriptivename) as?String}Set { ifLet NewValue =newvalue {objc_setassociatedobject (self,&Associatedkeys.descriptivename, NewValue asNSString?, UInt (objc_association_retain_nonatomic))} } }}
Method Cross (methods swizzling)
extension Uiviewcontroller { Public Override classFunc Initialize () {structStatic {Staticvar token:dispatch_once_t =0 } //Make sure this isn ' t a subclass ifSelf!==uiviewcontroller.self {return} dispatch_once (&static.token) {Let originalselector= Selector ("viewwillappear:") Let Swizzledselector= Selector ("nsh_viewwillappear:") Let Originalmethod=Class_getinstancemethod (self, originalselector) let Swizzledmethod=Class_getinstancemethod (self, swizzledselector) let Didaddmethod=Class_addmethod (self, originalselector, method_getimplementation (Swizzledmethod), method_gettypeencoding ( Swizzledmethod))ifDidaddmethod {Class_replacemethod (self, swizzledselector, method_getimplementation (Originalmethod), M Ethod_gettypeencoding (Originalmethod))}Else{method_exchangeimplementations (Originalmethod, Swizzledmethod); } } } //MARK:-Method swizzlingfunc nsh_viewwillappear (animated:bool) {self.nsh_viewwillappear (animated)ifLet name =self.descriptivename {println ("viewwillappear: \ (name)") } Else{println ("viewwillappear: \ (self)") } }}
Swift & the Objective-c Runtime