Wie überprüft man in Swift, ob ein Objekt (AnyObject) ein String ist?

8

Versucht mit:

%Vor%

Aber es sagt, Type 'String' entspricht nicht dem Protokoll 'AnyObject'

Wie können Sie also feststellen, ob ein Objekt eine Zeichenkette ist oder nicht?

Der Kontext dieser Frage ist die UIActivity-Methode prepareWithActivityItems, in der ich das Aktivitätselement speichern muss. Wenn es jedoch mehrere Aktivitätselemente gibt, wie finden Sie heraus, welche welche ist?

    
shim 23.10.2014, 05:00
quelle

2 Antworten

19

Überprüfen Sie:

%Vor%

Konvertieren:

%Vor%

Optionale Bindung:

%Vor%     
scottphc 23.10.2014, 05:04
quelle
4

Ich werde auf eine kleine Tangente gehen, damit Sie verstehen, was vor sich geht.

Strings sind keine Objekte in swift. !!!

Irgendwie. ???

Wegen der Funktionsweise der gebührenfreien Überbrückung ... Wenn Sie die Objective-C-Laufzeit importieren, können Sie Strings als Objekt behandeln ... überprüfen Sie dies:

Dieser Code wird überhaupt nicht kompiliert:

%Vor%

Aber wenn ich das Foundation-Framework auskommentiere, dann kompiliert es vollkommen gut, weil wir Bridging zwischen String und NSString aktivieren:

%Vor%

Und wenn Sie überprüfen möchten, ob foo eine Zeichenkette ist ... können Sie das tun:

%Vor%

Also ... string ist kein Objekt, aber wenn Sie es als eins behandeln, wird es in ein NSString umgewandelt und jetzt ist es ein Objekt. Sie können jedoch nicht überprüfen, ob ein Objekt zur Klasse String gehört, da es kein String -Objekt gibt. Sie müssen NSString verwenden.

Natürlich sollten Sie immer noch das tun, was Scott in seiner Antwort gesagt hat, indem Sie die Schlüsselwörter is oder as? verwenden.

    
Abhi Beckert 23.10.2014 07:01
quelle

Tags und Links