NSData
имел bytes
свойство для доступа к байтам. Новый тип значения Data
в Swift 3 вместо этого имеет метод withUnsafeBytes()
, который вызывает замыкание с указателем на байты.
Так вот как вы пишете Data
к NSOutputStream
(без приведения к NSData
):
let data = ... // a Data value
let bytesWritten = data.withUnsafeBytes { outputStream.write($0, maxLength: data.count) }
Примечания: withUnsafeBytes()
является общим методом:
/// 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
В приведенном выше вызове как ContentType
и ResultType
автоматически выводится на компилятор (как это UInt8
и Int
), что делает дополнительные UnsafePointer()
преобразования ненужным.
outputStream.write()
возвращает количество фактически записанных байтов. Как правило, вы должны проверить это значение. Это может быть -1
, если операция записи не удалась или меньше data.count
при записи в розетки, трубы или другие объекты с управлением потоком.