在 Swift 中从 NSString 创建 NSData

Posted

技术标签:

【中文标题】在 Swift 中从 NSString 创建 NSData【英文标题】:Creating NSData from NSString in Swift 【发布时间】:2014-07-25 05:55:35 【问题描述】:

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

我已经看到了这种方法的另一种方式:

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

Swift 可以推断 NSData 类型吗? @NicolasManzini 肯定可以,就像任何其他类型一样。 @macdonjo 是的,该 API 随时间而变化,现在它返回一个 Optional<NSData>,您需要在使用前解包 在 Swift2 中,不需要使用 "as" 强制转换,因为它是自动桥接的 转换为 UTF-8 不能失败,因此不需要它的可选绑定,您可以在此处强制解包。【参考方案2】:

斯威夫特 4 & 3

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

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

【讨论】:

谢谢。这在 swift 3 中完美地为我工作。 let input = "test string" let xdata = input.data(using: String.Encoding.utf8) 知道为什么 String(data: data!, encoding: .nonLossyASCII) 会为零吗?【参考方案3】:

这里方法很简单

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

【讨论】:

【参考方案4】:

斯威夫特 4

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

【讨论】:

不要在 Swift 中使用 NSString【参考方案5】:

在 Swift 5 中

let data = Data(YourString.utf8)

【讨论】:

【参考方案6】:
// 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)!

【讨论】:

【参考方案7】:

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

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

【讨论】:

在 Swift 3+ 中这是最有效的方法。【参考方案8】:

Swift 4.2

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

【讨论】:

【参考方案9】:

字符串转数据

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

将数据转换为字符串

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

【讨论】:

以上是关于在 Swift 中从 NSString 创建 NSData的主要内容,如果未能解决你的问题,请参考以下文章

在Swift中从NSString创建NSData

如何在 Swift 中从 sockaddr_in 获取 sockaddr?

如何在 swift 中从 nsimage 创建灰度图像?

在 Swift 中从 UIView 创建 PDF

如何在 Swift 3 中从 Base64 编码的字符串创建图像? [复制]

在Swift中从整数数组创建NSIndexSet