2016-07-12 20 views
4

Ich verwende NSKeyedArchiver.archivedDataWithRootObject(obj), um ein Objekt zu NSData zu transformieren. Die Methode erfordert, dass ihr Parameter NSObject ist, konform zu NSCoding.Sind die String-, Array- und Dictionary NSObjects von Swift? Warum kann eine Struktur ein NSObject sein?

Ich versuchte Archivierung Swift String s, Array s und Dictionary s, und es hat gut funktioniert. Also ich denke String ist ein NSObject konform zu NSCoding.

Ich habe auch diesen Code auf einem Spielplatz, um zu bestätigen, dass String ist ein NSObject:

var str = "Hello, playground" 
let isObject = (str is NSObject) // isObject is true 

Aber wenn ich zu String ‚s Definition navigieren (mit Cmd + Klick), zeigt es, dass String a struct. Ich kann den Code nicht finden, der zeigt, dass String ein NSObject ist.

public struct String { 
    /// An empty `String`. 
    public init() 
} 

Also, warum in der String Definition kann ich den Code nicht gefunden zeigen, dass String ein NSObject ist? Und warum kann eine Struktur eine NSObject sein?

Antwort

4

String, Array, Dictionary sind alle auf ihren Objective-C Pendants überbrückt (NSString, NSArray und NSDictionary) und wie so nahtlos wirken kann.

String selbst erbt nicht von NSObject und ist eigentlich eine Struktur, aber es ist überbrückt von NSString was tut. Wenn Sie eine (Swift) String in Ihrem Code verwenden, kann es wie eine NSString handeln, so dass Sie die Ausgabe aus dem von Ihnen bereitgestellten Code erhalten.

+0

Danke für Ihre Erklärung. Können Sie mir helfen, wie kann ich eine MyString-Struktur erstellen, überbrückt sie NSString, wie Swift String struct? – huync

+1

@Huync Dieses Verhalten ist in die schnelle Sprache eingebaut, die Sie nicht in der Lage sein werden, Ihre eigene Struktur zu erstellen und sie mit NSString zu überbrücken ... wenn Sie 'NSKeyedArchiver' verwenden möchten, dann machen Sie einfach eine Klasse das erbt von 'NSString' oder' NSObject' –

+1

@BlakeLockley Irgendwelche Ressourcen, um Wissen darüber zu erhalten, wie man Brücken zwischen Typen wie NSString und String macht? Wie der technische Prozess? +1 obwohl. –