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?
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
@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' –
@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. –