在Swift中从NSString创建NSData


175

我试图最终NSMutableURLRequest使用有效的HTTPBody,但是似乎无法将字符串数据(来自UITextField)放入可用的NSData对象中。

我已经看到这种方法的另一种选择:

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

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

Answers:


362

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

Swift可以推断出NSData类型吗?
Nicolas Manzini 2014年

@NicolasManzini可以肯定,与其他任何类型一样。
加布里埃尔·彼得罗内拉2014年

2
@macdonjo是的,该API随着时间的推移发生了变化,现在它返回Optional<NSData>,您需要在使用前将其拆开
Gabriele Petronella 2014年

3
在Swift2中,由于它是自动桥接的,因此无需使用“ as”
强制转换

1
转换为UTF-8不会失败,因此并不是真正需要的可选绑定,您可以在此处强制打开。
马丁R

33

斯威夫特4&3

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

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

谢谢。这对我来说是最快的3。let input =“ test string” let xdata = input.data(使用:String.Encoding.utf8)
raddevus

1
知道为什么String(data:data !, encoding:.nonLossyASCII)为零吗?
Happiehappie

4

这里很简单的方法

let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

4

斯威夫特4

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

不要NSString在Swift中使用。
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)!

2

要创建非可选数据,我建议使用它:

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

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

2

斯威夫特4.2

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


0

将字符串转换为数据

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

将数据转换为字符串

extension Data {
      func toString() -> String {
          return String(decoding: self, as: UTF8.self)
      }
   }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.