String Swift 3从字符串创建utf8编码数据的方法

String Swift 3从字符串创建utf8编码数据的方法,string,utf-8,swift3,String,Utf 8,Swift3,我知道有一大堆关于NSData的问题。我很好奇如何在Swift3字符串到utf8编码(带或不带空终止)到Swift3数据对象之间切换 到目前为止,我想到的最好的方法是: let input = "Hello World" let terminatedData = Data(bytes: Array(input.nulTerminatedUTF8)) let unterminatedData = Data(bytes: Array(input.utf8)) 必须进行中间的Array()构造似乎是

我知道有一大堆关于NSData的问题。我很好奇如何在Swift3
字符串
到utf8编码(带或不带空终止)到Swift3
数据
对象之间切换

到目前为止,我想到的最好的方法是:

let input = "Hello World"
let terminatedData = Data(bytes: Array(input.nulTerminatedUTF8))
let unterminatedData = Data(bytes: Array(input.utf8))
必须进行中间的
Array()
构造似乎是错误的。

很简单:

let input = "Hello World"
let data = input.data(using: .utf8)!
如果要以null终止
数据
,只需在其上附加一个0即可。或者您可以调用
cString(使用:)


NSString
来自
NSFoundation
框架的方法应该放弃,转而使用与Swift标准库等效的方法。数据可以用任何
序列初始化,其中的元素是
UInt8
<代码>字符串。UTF8View
满足此要求

let input = "Hello World"
let data = Data(input.utf8)
// [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]
字符串null终止是C语言的一个实现细节,它不应该泄漏到外部。如果您计划使用C API,请查看
String
类型的
utf8CString
属性:

public var utf8CString: ContiguousArray<CChar> { get }

太好了,谢谢。有趣的是,
cString
方法返回一个
[UInt8]
,如果这个答案令人满意,请将它标记为正确答案。这鼓励社区中更多人回答您的问题,并确保当其他用户偶然发现此页面上有相同的问题时,他们可以轻松找到正确的答案。您是否同意此问题应再次审查,因为已接受的答案使用NSFoundation API而不是Swift API?
public var utf8CString: ContiguousArray<CChar> { get }
let input = "Hello World"
let data = Data(input.utf8CString.map { UInt8($0) })
// [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 0]