在Swift中从NSString创建NSData

181

我试图最终拥有一个带有有效的HTTPBodyNSMutableURLRequest,但我似乎无法将来自UITextField的字符串数据转换为可用的NSData对象。

我已经看到了反过来的方法:

NSString(data data: NSData!, encoding encoding: UInt)

但是我似乎找不到适用于我的情况的任何文档。 如果必要,我可以将字符串放入其他类型中,但使用 Swift 的 NSData 初始化选项似乎都不是我要找的。

9个回答

371

在 Swift 3 中

let data = string.data(using: .utf8)
在Swift 2中(或者如果您已经有一个NSString实例)
let data = string.dataUsingEncoding(NSUTF8StringEncoding)
在 Swift 1 中(或如果你有一个 Swift 的 String):
let data = (string as NSString).dataUsingEncoding(NSUTF8StringEncoding)
此外请注意,data是一个可选的Optional<NSData>类型(因为转换可能会失败),因此在使用它之前需要对其进行解包,例如:
if let d = data {
    println(d)
}

Value of optional type 'NSData?' not unwrapped; did you mean to use '!' or '?'? - User
2
@macdonjo 是的,那个API随着时间的推移发生了变化,现在它返回一个Optional<NSData>,在使用之前需要进行解包。 - Gabriele Petronella
@GabrielePetronella,在这种情况下,最好直接使用if let data =(swiftString as NSString).dataUsingEncoding(NSUTF8StringEncoding){}一次性处理转换和可选项,这样可能更清晰。 - memmons
3
在Swift2中,不需要使用"as"强制转换,因为它会自动进行桥接。 - LiangWang
1
UTF-8的转换不可能失败,因此这里不真正需要可选绑定,你可以在此处强制解包。 - Martin R
显示剩余3条评论

34

Swift 4 & 3

在Swift 3中,从String对象创建Data对象的方式已经发生了变化。现在正确的版本是:

let data = "any string".data(using: .utf8)

谢谢。这在 Swift 3 中完美地运行了。 let input = "测试字符串" let xdata = input.data(using: String.Encoding.utf8) - raddevus
1
你有任何想法为什么String(data: data!, encoding: .nonLossyASCII)会是nil吗? - Happiehappie

6

在Swift 5中

let data = Data(YourString.utf8)

4

Swift 4

let data = myStringVariable.data(using: String.Encoding.utf8.rawValue)

在Swift中不要使用NSString - vadian

4

将字符串转换为数据

extension String {
    func toData() -> Data {
        return Data(self.utf8)
    }
}

将数据转换为字符串

extension Data {
      func toString() -> String {
          return String(decoding: self, as: UTF8.self)
      }
   }

4
这是一个非常简单的方法。
let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

3
为了创建非可选数据,我建议使用它:
let key = "1234567"
let keyData = Data(key.utf8)

2
在Swift 3+中,这是最有效的方法。 - vadian

3
// Checking the format
var urlString: NSString = NSString(data: jsonData, encoding: NSUTF8StringEncoding)

// Convert your data and set your request's HTTPBody property
var stringData: NSString = NSString(string: "jsonRequest=\(urlString)")

var requestBodyData: NSData = stringData.dataUsingEncoding(NSUTF8StringEncoding)!

3

Swift 4.2

let data = yourString.data(using: .utf8, allowLossyConversion: true)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接