我想将[String]转换为NSData以进行BLE连接.
我知道如何将String转换为NSData / NSData为String.
// String -> NSData var str: String = "Apple"; let data: NSData = str.dataUsingEncoding(NSUTF8StringEncoding)! // NSData -> String var outStr: String = NSString(data:data,encoding:NSUTF8StringEncoding) as! String
但是,我该如何转换,
// [String] -> NSData ??? let strs: [String] = ["Apple","Orange"]
这是转换[UInt8]< - >的样本.的NSData
https://gist.github.com/nolili/2bf1a701df1015ed6488
我想转换[String]< - >的NSData
// [String] -> NSData ??? Is it correct??? var strs: [String] = ["Apple","Orange"] let data2 = NSData(bytes: &strs,length: strs.count) // NSData -> [String] ... please teach me..
为了直接回答您的问题,您可以向数组中的每个字符串询问其thisString.dataUsingEncoding(_ :)并将结果附加到NSMutableData实例,直到您完成所有操作.
let stringsData = NSMutableData() for string in strings { if let stringData = string.dataUsingEncoding(NSUTF16StringEncoding) { stringsData.appendData(stringData) } else { NSLog("Uh oh,trouble!") } }
当然,如果你想稍后分离字符串,这对你没有帮助,所以我们真正需要知道的是你打算在什么环境中在连接的另一端使用这些数据?如果另一端也使用Cocoa,请考虑将其打包为PLIST.由于NSString,NSArray和NSData都是属性列表类型,因此您可以直接归档NSAtring NSString实例:
let arrayAsPLISTData = NSKeyedArchiver.archivedDataWithRootObject(strings)
…然后将生成的NSData实例传输到Cocoa感知目标,然后:
if let newStrings: [String] = NSKeyedUnarchiver.unarchiveObjectWithData(arrayAsPLISTData) as? [String] { // ... do something }