我更新了XCode
之後,所以它現在可以爲iOS 9.3
構建代碼,我有很多關於更新語法以符合即將到來的Swift version 3
的警告。Swift #selector在子類
許多警告是關於Selector
,現在我使用的是這樣的:
class Foo {
func registerPan() {
let recognizer = UIPanGestureRecognizer(target: self, action: Selector("handlePan:"))
//do something with recognizer
}
func handlePan(recognizer:UIPanGestureRecognizer) {
//handle pan gesture
}
}
class Bar: Foo {
override func handlePan(recognizer:UIPanGestureRecognizer) {
//overriding handle pan gesture
}
}
所以Foo
和Bar
實例都有自己的方法來處理平移手勢。 Xcode
建議我改變使用選擇器的方法,使用#selector expression
。編輯自動建議的變化是:
#selector(Foo.handlePan(_:))
這裏是我的問題。在以前的版本中,爲基類和子類調用了一個特定的實現。現在,即使對Bar
類(Bar
從Foo
繼承registerPan
函數)的實例,看起來函數Foo
也將被調用。它是否正確?
很可能XCode
靜態分析不關心繼承這裏。我正在考慮改變這些選擇到:
#selector(self.handlePan(_:))
所以不管類調用它自己的實現,但我想知道這是否是一個好主意,一個實例。
那麼你試過了嗎? – LinusGeffarth
當然,我做到了。我在問在這種情況下應該做什麼。 – pkacprzak