Mit diesem Update bekomme ich den Fehler Argument of #selector refers to a method that is not exposed to objective c
, aber wenn ich mit dem alten Selector("myMethodName")
gehe, bekomme ich eine Warnung, um den besseren Weg zu finden. Ist es möglich, in diesem Fall #selector()
zu verwenden? Es funktioniert nicht mit der Einstellung @objc
auf meinem Protokoll, ich habe es versucht.
Hier ist ein Spielplatz, den du ausprobieren kannst, der zeigt, dass er nicht funktioniert mit der Einstellung @objc
Beim dynamischen Dispatching mit #selector () oder Selector () wird Ihre Swift-Protokollerweiterung nicht angezeigt. Versuchen Sie stattdessen, möglichst Objective-C zu vermeiden. Sie können dasselbe Ergebnis mit libdispatch erreichen:
%Vor%Zugegeben, das ist nicht so flexibel wie die Verwendung von Selektoren, aber Sie können echte Swift-Protokollerweiterungen verwenden.
BEARBEITEN: Wenn Sie den Aufruf der Methode abbrechen möchten, versuchen Sie Folgendes:
%Vor%Für XCode 8.2.1 und Swift 3.
Sie können das traditionelle Selector("methodName")
verwenden, wie Sie es versucht haben. Darüber hinaus können Sie die Warnung stummschalten, indem Sie sie in Klammern in Selector(("methodName"))
Da alles in Ihrem Protokoll ist, ist es weniger wahrscheinlich, dass Sie Tippfehler machen, die am Ende enden werden