Ich versuche, den Quellcode meines Projekts von Swift 3 in Swift 4 zu konvertieren. Eine Warnung, die Xcode mir gibt, betrifft meine Selektoren.
Zum Beispiel füge ich einer Schaltfläche ein Ziel hinzu, indem ich einen regulären Selektor wie folgt verwende:
button.addTarget(self, action: #selector(self.myAction), for: .touchUpInside)
Dies ist die Warnung, die angezeigt wird:
Das Argument von '#selector' bezieht sich auf die Instanzmethode 'myAction ()' in 'ViewController', die von der in Swift 4 veralteten Inferenz des Attributs '@objc' abhängt
Fügen Sie '@objc' hinzu, um diese Instanzmethode für Objective-C verfügbar zu machen
Wenn Sie nun Fix
auf die Fehlermeldung klicken, geschieht dies für meine Funktion:
// before
func myAction() { /* ... */ }
// after
@objc func myAction() { /* ... */ }
Ich möchte nicht wirklich alle meine Funktionen umbenennen, um die @objc
Marke einzuschließen, und ich gehe davon aus, dass dies nicht erforderlich ist.
Wie schreibe ich den Selektor neu, um mit der Abwertung umzugehen?
Verwandte Frage:
@objc
? Das ist ein bisschen nervig, aber ich mache diese Funktionen im Allgemeinen privat und muss sie @objc
sowieso als markieren.
@objcMembers
, um alle Obj-C-kompatiblen Mitglieder Obj-C auszusetzen. Ich würde dies jedoch nicht empfehlen, es sei denn, Sie benötigen tatsächlich die Bereitstellung Ihrer gesamten Klasse.
@objc
ist nun erforderlich, um sie zu Obj-C, zu belichten und damit mit Selektoren zu verwenden.