ios - Swift #selector in subclass -


after updated xcode, can build code ios 9.3 now, have lot of warnings updating syntax conform upcoming swift version 3.

many warnings selector, i'm using this:

class foo {      func registerpan() {         let recognizer = uipangesturerecognizer(target: self, action: selector("handlepan:"))         //do recognizer     }      func handlepan(recognizer:uipangesturerecognizer) {         //handle pan gesture     } }  class bar: foo {      override func handlepan(recognizer:uipangesturerecognizer) {         //overriding handle pan gesture     } } 

so instances of foo , bar have own ways handle pan gesture. xcode suggests me change method use selectors, use #selector expression. automatic suggested change editor is:

#selector(foo.handlepan(_:)) 

here comes question. in previous version, specific implementation called base class , subclass. now, looks function of foo called instance of bar class (bar inherits registerpan function foo). correct?

probably xcode static analysis doesn't care inheritance here. i'm considering changing these selectors to:

#selector(self.handlepan(_:)) 

so instance of whatever class calls own implementation, want sure if it's idea.

as apple docs say:

a selector expression lets access selector used refer method in objective-c.

#selector(method name) 

the method name must reference method available in objective-c runtime. value of selector expression instance of selector type. example:

class someclass: nsobject {     @objc(dosomethingwithint:)     func dosomething(x: int) { } } let x = someclass() let selector = #selector(x.dosomething(_:)) 

..because selector created @ compile time, not @ runtime, compiler can check method exists , method exposed objective-c runtime.

also can make extension of selector inside vc('s) , declare selectors there:

private extension selector {     static let updateitems  = #selector(characterslistvc.updateitems)     static let getmoreitems = #selector(characterslistvc.getmoreitems) } 

and use way:

button?.addtarget(self, action: .updateitems, forcontrolevents: .touchupinside) 

hope helps :)


Comments

Popular posts from this blog

java - nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet Hibernate+SpringMVC -

sql - Postgresql tables exists, but getting "relation does not exist" when querying -

asp.net mvc - breakpoint on javascript in CSHTML? -