我正试图在Swift中写一个 String
到 NSOutputStream
. 使用Objective C编写字符串通常可以将其作为NSData传递
NSData *data = [[NSData alloc] initWithData:[mystring dataUsingEncoding:NSASCIIStringEncoding]];
[outputStream write:[data bytes] maxLength:[data length]];
这不适用于swift
var data: NSData = mystring.dataUsingEncoding(NSUTF8StringEncoding)!
outputStream.write(data, maxLength: data.length)
这会产生错误
'NSData'无法转换为'UnsafePointer'
用于将数据写入流的行 .
你如何在Swift中向NSOutputStream写一个String?
3 回答
这里有两个问题 . 第一个是你将
data
传递给outputStream.write()
而不是data.bytes
(就像你在Objective-C代码中传递[data bytes]
一样) . 第二个问题是data.bytes
返回UnsafePointer<Void>
,但NSOutputStream.write()
返回UnsafePointer<UInt8>
. 幸运的是,UnsafePointer
有一种方法可以在不同类型之间进行转换:将这些内容放在一起会使您的代码看起来像这样:
在最近的Swift中,它应该更容易,不再需要NSData .
可以将数组作为正确类型的缓冲区进行访问(请参阅
withUnsafeBufferPointer
) . 我认为数组是必要的,因为utf8视图实际上并未实例化为完整数组,而只是原始字符串的视图 .在 生产环境 代码中,您应该检查写入输出流的返回值,并根据您的方案检查在写入之前有空格,但此答案的焦点是Swift String的编码,以便可以编写它 .
希望这个例子有所帮助 . 它将字符串写入文档目录 . 请注意,outputStream使用带有可用初始化程序的Swift 1.1进行测试 .
问候