Definieren Sie die Struktur, die in Swift wie eine Klasse behandelt wird

8

In Swift wird eine String Struktur auch als Klassenobjekt behandelt, wie bei der Verwendung der Methode NSCoder encodeObject(_:forKey:) . Ich weiß, dass String direkt mit der objective-c-Klasse, NSString , überbrückt wird, aber gibt es eine Möglichkeit, eine benutzerdefinierte struct zu erstellen, die sich ähnlich verhält? Vielleicht überbrück es zu einer benutzerdefinierten Klasse? Ich möchte in der Lage sein, so etwas zu tun:

%Vor%     
Noodle of Death 08.08.2016, 19:36
quelle

3 Antworten

0

Ich habe eine funktionierende, elegante Lösung gefunden, die mit einem _ObjectiveCBridgeable struct funktioniert, das von NSCoder ; Danke an die Referenz das Martin R zur Verfügung gestellt. Hier ist der Bibliothekscode, den ich für alle Interessierten geschrieben habe. Ich kann jetzt so etwas machen:

%Vor%

SortedArray.swift

%Vor%

NSSortedArray.swift

%Vor%

NSCoder.swift

%Vor%     
Noodle of Death 24.08.2016, 00:27
quelle
2

Dies ist derzeit nicht möglich. SE-0058 wird darauf eingehen, wird aber von Swift 3 zurückgestellt Eine endgültige Umsetzung von SE-0058 würde hoffentlich mehr als nur die ObjC-Überbrückung ermöglichen. zum Beispiel erlaubt C ++ oder .NET Bridging auch in einer allgemeineren Lösung.

    
Rob Napier 08.08.2016 19:56
quelle
2

Letztendlich ist das Bridging zwischen String und NSString ziemlich einfach.

NSString hat nur 2 Instanzvariablen (Der Stringzeiger nxcsptr und die Länge nxcslen ). String verwendet _StringCore , das nur 3 Eigenschaften hat ( _baseAddress , _countAndFlags und < a href="https://github.com/apple/swift/blob/045bc16b6d7d6a9dbd3e08b5943d9fefca4a194a/stdlib/public/core/StringCore.swift#L33"> _owner ). Die Umwandlung hin und her ist fest codiert und wird vom Compiler explizit aufgerufen. Es gibt kein automatisches System, das zum Generieren von Klassen aus Strukturen implementiert ist oder umgekehrt.

Sie müssen ein struct / class -Paar implementieren (wie bei String und NSString ) und Initialisierer implementieren, die eines aus dem anderen konstruieren.

    
Alexander 08.08.2016 19:57
quelle

Tags und Links