在 Swift 中从 NSString 创建 NSData
Posted
技术标签:
【中文标题】在 Swift 中从 NSString 创建 NSData【英文标题】:Creating NSData from NSString in Swift 【发布时间】:2014-07-25 05:55:35 【问题描述】:我试图最终获得一个带有有效HTTPBody
的NSMutableURLRequest
,但我似乎无法将我的字符串数据(来自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)
还要注意data
是Optional<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 中从 sockaddr_in 获取 sockaddr?