Wie verwende ich #selector (myMethodName) in einer Protokollerweiterung?

9
%Vor%

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

%Vor%     
hakonbogen 23.03.2016, 09:55
quelle

2 Antworten

3

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%     
Eivind Rannem Bøhler 23.03.2016, 11:53
quelle
1

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"))

einschließen

Da alles in Ihrem Protokoll ist, ist es weniger wahrscheinlich, dass Sie Tippfehler machen, die am Ende enden werden

    
wyu 09.06.2017 20:49
quelle

Tags und Links