NSData
hatte eine bytes
Eigenschaft die Bytes zuzugreifen. Der neue Wert Data
in Swift 3 hat stattdessen eine Methode withUnsafeBytes()
, die eine Schließung mit einem Zeiger auf die Bytes aufruft.
Das ist also, wie Sie schreiben Data
zu einem NSOutputStream
(ohne NSData
zu Gießen):
let data = ... // a Data value
let bytesWritten = data.withUnsafeBytes { outputStream.write($0, maxLength: data.count) }
Bemerkungen: withUnsafeBytes()
ist eine generische Methode:
/// Access the bytes in the data.
///
/// - warning: The byte pointer argument should not be stored and used outside of the lifetime of the call to the closure.
public func withUnsafeBytes<ResultType, ContentType>(_ body: @noescape (UnsafePointer<ContentType>) throws -> ResultType) rethrows -> ResultType
In dem obigen Anruf sowohl ContentType
als auch ResultType
werden automatisch vom Compiler abgeleitet (wie UInt8
und Int
), was zusätzliche UnsafePointer()
Konvertierungen überflüssig macht.
outputStream.write()
gibt die Anzahl der tatsächlich geschriebenen Bytes zurück. Im Allgemeinen sollten Sie überprüfen diesen Wert. Es kann -1
sein, wenn der Schreibvorgang fehlgeschlagen ist, oder weniger als data.count
beim Schreiben auf Sockets, Pipes oder andere Objekte mit einer Ablaufsteuerung.