Nachdem ich aktualisiert XCode
, so dass es Code für iOS 9.3
jetzt bauen kann, habe ich eine Menge Warnungen über die Aktualisierung der Syntax zu kommenden Swift version 3
entsprechen.Swift #selector in der Unterklasse
Viele Warnungen sind über Selector
, jetzt so etwas wie dieses Ich verwende:
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
}
}
So Instanzen Foo
und Bar
ihre eigenen Wege haben pan Geste zu behandeln. Xcode
schlägt mir vor, die Methode zu ändern, die ich Selektoren verwende, um #selector expression
zu verwenden. Die vorgeschlagene automatische Änderung durch den Editor lautet:
#selector(Foo.handlePan(_:))
Hier kommt meine Frage. In der vorherigen Version wurde eine spezifische Implementierung für die Basisklasse und für die Unterklasse aufgerufen. Nun sieht es aus wie Funktion von Foo
wird auch für eine Instanz der Bar
Klasse aufgerufen (Bar
erbt registerPan
Funktion von Foo
). Ist das richtig?
Wahrscheinlich XCode
statische Analyse kümmert sich nicht um Vererbung hier. Ich betrachte diese Selektoren Wechsel zu:
#selector(self.handlePan(_:))
so eine Instanz, was auch immer Klasse eine eigene Implementierung ruft, aber ich will sicher sein, ob es eine gute Idee ist.
Nun haben Sie es versucht? – LinusGeffarth
Natürlich tat ich es. Ich frage, was in diesem Fall getan werden sollte. – pkacprzak