Chen-Tsu Lin Chen-Tsu Lin - 5 months ago 170
Swift Question

How to convert String to UnsafePointer<UInt8> and length

When I using

NSOutputStream
's
write
method

func write(_ buffer: UnsafePointer<UInt8>, maxLength length: Int) -> Int


I don't know how to convert
String
to
UnsafePointer<UInt8>
and length

How can I do this in swift?

Answer

You have to convert the string to UTF-8 data first

let string = "foo bar"
let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!

and then write it to the output stream

let bytesWritten = outputStream.write(UnsafePointer(data.bytes), maxLength: data.length)

The UnsafePointer() cast is necessary because data.bytes has the type UnsafePointer<Void>, and not UnsafePointer<UInt8> as expected by the write() method.


Update for Swift 3:

let string = "foo bar"
// Conversion to UTF-8 data (cannot fail):
let data = string.data(using: String.Encoding.utf8)! 
// Write to output stream:
let bytesWritten = data.withUnsafeBytes { outputStream.write($0, maxLength: data.count) }