Die Lösung von diese Frage funktioniert nicht mehr mit Schnell 3.
Es gibt keine Eigenschaft bytes
von Data
(früher NSData
.
Mit diesem Code erhalte ich den Fehler:
%Vor% Wie kannst du in swift 3 Data
in NSOutputStream
schreiben?
NSData
hatte eine bytes
-Eigenschaft, um auf die Bytes zuzugreifen.
Der neue Werttyp Data
in Swift 3 hat withUnsafeBytes()
Methode stattdessen, die eine Schließung mit einem Zeiger auf die Bytes aufruft.
So schreibst du Data
in ein NSOutputStream
(ohne Casting auf NSData
):
Anmerkungen:
withUnsafeBytes()
ist eine generische Methode:
In dem obigen Aufruf,
Sowohl ContentType
als auch ResultType
werden automatisch durch abgeleitet
der Compiler (als UInt8
und Int
), macht zusätzliche
UnsafePointer()
Conversions sind nicht erforderlich.
outputStream.write()
gibt die Anzahl der tatsächlich geschriebenen Bytes zurück.
Im Allgemeinen sollten Sie diesen Wert überprüfen . Es kann -1
if sein
Die Schreiboperation ist fehlgeschlagen oder kleiner als data.count
beim Schreiben
zu Sockets, Pipes oder anderen Objekten mit einer Flusskontrolle.
Martin R , danke für Ihre Antwort. Das war die Grundlage für eine Komplettlösung. Hier ist es:
%Vor%Benutze einfach diese Erweiterung (Swift 4)
%Vor%Und für InputStream
%Vor% Data
und NSData
sind zwei separate Klassen in Swift 3, und Data
hat nicht die Eigenschaft bytes
.
Die Lösung besteht darin, data
vom Typ NSData
Nach Migrieren zu Swift 2.3 oder Swift 3 von Swift 2.2 :
Der Migrator konvertiert die meisten Verwendungen von NSData in den neuen Werttyp Data. Es gibt jedoch bestimmte Methoden für NSData, die mit UnsafeMutablePointer arbeiten, während die entsprechenden Methoden für Daten UnsafeMutablePointer verwenden. (Zum Beispiel akzeptiert NSData.getBytes (: length :) mehr als Data.copyBytes (: length :).) Zur Erinnerung: Das speicherinterne Layout von Swift-Typen ist nicht garantiert.
Tags und Links swift swift3 nsdata foundation nsoutputstream