2016-04-07 2 views
3

В чем разница между:разница между #selector (Aclass.method) и #selector (self.method)

#selector(Aclass.someMethod) и #selector(self.someMethod)

someMethod является функцией экземпляра, и я звоню внутри AClass как это:

NSNotificationCenter.defaultCenter().addObserver(self, 
    selector: #selector(self.someMethod), // #selector(Aclass.method) 
    name: "REMoveOrderViewRefresh", 
    object: nil 
) 
+0

код [предложение для '# selector'] (https://github.com/apple/swift-evolution/blob/master/proposals/0022-objc-selectors.md) никогда не упоминает' себя. синтаксис метода, поэтому мне интересно, работает ли это только случайно. – zneak

+1

@dfri nice find, не знал об этом! (из голосов вернется в 12:00 по тихоокеанскому времени, если это еще не было закрыто) – JAL

ответ

4

Если вы ссылки селектор из своего собственного класса, не должно быть никакой разницы, так как self указывает на Aclass.

Если вы ссылаетесь на селектор другого класса, вы должны явно позвонить Aclass.someMethod, так как селектор не находится на self, но на другом объекте.

class MyClass: NSObject { 
    func someFunc() { 
     NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.someOtherFunc(_:)), name: "someEvent", object: nil) 
    } 

    func someOtherFunc(notification: AnyObject) { 
     // 
    } 
} 

class OtherClass: NSObject { 

    func anotherFunc() { 
     let myInstance = MyClass() 

     NSNotificationCenter.defaultCenter().addObserver(myInstance, selector: #selector(MyClass.someOtherFunc(_:)), name: "someEvent", object: nil) 
    } 
} 
+0

Я вполне мог ошибаться здесь, но вызов self в классе возвращает имя класса, но вызов self на экземпляр объекта возвращает это в частности, не так ли? Итак, основываясь на том, что self.someMethod не работает? – Scriptable

+0

@Scriptable, если я не ошибаюсь '#selector (MyClass.someOtherFunc (_ :))' указывает на этот конкретный метод на экземпляр класса. Селектор просто должен быть явно определен как метод для класса. Я с радостью отступлю и позволю профессионалам ответить, если это не так. – JAL

+0

Это было просто мое понимание .. надеясь, что профессионал укажет мне в правильном направлении ха-ха. Мне сейчас очень интересно, мне нужно попробовать – Scriptable