在 Swift 中从 NSString 创建 NSData

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

我见过这种反方向的方法:

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

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

163464 次浏览

在 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)

还要注意的是,dataOptional<NSData>(因为转换可能会失败) ,所以在使用它之前需要打开它,例如:

if let d = data {
println(d)
}

这里很简单的方法

let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
// 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)!

Swift 4 & 3

String对象创建 Data对象已在 Swift 3中更改。现在正确的版本是:

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

斯威夫特

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

为了创建不可选的数据,我推荐使用它:

let key = "1234567"
let keyData = Data(key.utf8)

Swift 4.2

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

在雨燕5号

let data = Data(YourString.utf8)

将字符串转换为数据

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

将数据转换为字符串

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