在Swift中从NSString创建NSData

Jac*_*gan 171 xcode nsstring nsdata nsmutableurlrequest swift

我试图最终得到NSMutableURLRequest一个有效的HTTPBody,但我似乎无法将我的字符串数据(来自a UITextField)变成可用NSData对象.

我已经看到这种方法走另一条路:

NSString(data data: NSData!, encoding encoding: UInt)
Run Code Online (Sandbox Code Playgroud)

但我似乎无法为我的用例找到任何文档.如果有必要,我愿意将字符串放入其他类型,但是NSData使用Swift 的初始化选项似乎都不是我想要的.

Gab*_*lla 353

在Swift 3中

let data = string.data(using: .utf8)
Run Code Online (Sandbox Code Playgroud)

在Swift 2中(或者如果你已经有一个NSString实例)

let data = string.dataUsingEncoding(NSUTF8StringEncoding)
Run Code Online (Sandbox Code Playgroud)

在Swift 1中(或者如果你有一个swift String):

let data = (string as NSString).dataUsingEncoding(NSUTF8StringEncoding)
Run Code Online (Sandbox Code Playgroud)

另请注意,这 data是一个Optional<NSData>(因为转换可能会失败),因此您需要在使用它之前将其解包,例如:

if let d = data {
    println(d)
}
Run Code Online (Sandbox Code Playgroud)

  • 在Swift2中,没有必要使用"as"强制转换,因为它会自动桥接 (3认同)
  • @macdonjo是的,那个API随着时间的推移而改变了,现在它返回一个`Optional <NSData>`,你需要在使用之前解包 (2认同)

Sai*_*ira 32

斯威夫特4&3

在Swift 3中更改了DataString对象创建对象.现在正确的版本是:

let data = "any string".data(using: .utf8)
Run Code Online (Sandbox Code Playgroud)


小智 6

在迅捷5中

let data = Data(YourString.utf8)
Run Code Online (Sandbox Code Playgroud)