在Swift中将字符串写入NSOutputStream [英] Writing a String to an NSOutputStream in Swift
问题描述
我正在尝试在Swift中将String
写入NSOutputStream
.使用Objective C编写字符串通常可以通过将其作为NSData传递来实现.
I'm trying to write a String
to an NSOutputStream
in Swift. Writing Strings that way with Objective C usually works by passing it as NSData
NSData *data = [[NSData alloc] initWithData:[mystring dataUsingEncoding:NSASCIIStringEncoding]];
[outputStream write:[data bytes] maxLength:[data length]];
这不适用于迅速
var data: NSData = mystring.dataUsingEncoding(NSUTF8StringEncoding)!
outputStream.write(data, maxLength: data.length)
这会产生错误
'NSData'不能转换为'UnsafePointer'
'NSData' is not convertible to 'UnsafePointer'
用于将数据写入流的行.
for the line that writes the data to the stream.
如何在Swift中将字符串写入NSOutputStream?
How would you write a String to an NSOutputStream in Swift?
推荐答案
这里有两个问题.首先是您要将data
传递给outputStream.write()
而不是data.bytes
(就像您在Objective-C代码中传递了[data bytes]
一样).第二个问题是data.bytes
返回UnsafePointer<Void>
,但是NSOutputStream.write()
接受UnsafePointer<UInt8>
.幸运的是,UnsafePointer
可以在类型之间进行转换:
There are two issues here. The first is that you're passing data
to outputStream.write()
and not data.bytes
(like you passed [data bytes]
in your Objective-C code). The second issue is that data.bytes
returns an UnsafePointer<Void>
, but NSOutputStream.write()
takes an UnsafePointer<UInt8>
. Luckily, UnsafePointer
has a way to convert between types:
/// Convert from a UnsafePointer of a different type.
///
/// This is a fundamentally unsafe conversion.
init<U>(_ from: UnsafePointer<U>)
将这些内容放在一起会使您的代码看起来像这样:
Putting those things together makes your code look something like this:
let data: NSData = mystring.dataUsingEncoding(NSUTF8StringEncoding)!
outputStream.write(UnsafePointer<UInt8>(data.bytes), maxLength: data.length)
这篇关于在Swift中将字符串写入NSOutputStream的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!