我正在使用Multipeer Connectivity在Swift中创建一个程序,以便在设备之间发送信息。我发送一个整数数组,我需要将其转换为NSDictionary,但是当我试图将它恢复为整数数组时,我无法将其恢复。我知道这是一种将NSString转换为Integer的方法,请参阅here,但我找不到数组的方法。有谁知道我怎么做?
发送信息的对等体中的代码如下所示:
let numberArray:[Int] = [4,76,23,65,23,75,23,65,12]
let messageDict = ["newNumbersArray":numberArray]
let messageData = NSJSONSerialization.dataWithJSONObject(messageDict, options: NSJSONWritingOptions.PrettyPrinted, error: nil)
var error:NSError?
appDelegate.mpcHandler.session.sendData(messageData, toPeers: appDelegate.mpcHandler.session.connectedPeers, withMode: MCSessionSendDataMode.Reliable, error: &error)
在另一个对等体中,我的代码如下所示:
func handleReceivedDataWithNotification(notification:NSNotification){
let userInfo = notification.userInfo! as Dictionary
let receivedData:NSData = userInfo["data"] as NSData
let message = NSJSONSerialization.JSONObjectWithData(receivedData, options: NSJSONReadingOptions.AllowFragments, error: nil) as NSDictionary
}
如何使用int?
将其转换回数组答案 0 :(得分:1)
有两种主要的方法来发送信息"通过电线"不同系统之间:第一个称为序列化,第二个称为编组。
<强>序列化强>
按照惯例将信息编码为有线格式。在现代Cocoa中,最常见的序列化类型是plist和JSON。
<强>编组:强>
Marshaling与序列化类似,不同之处在于它允许使用映射文件覆盖默认行为。这对于 合同首次 开发非常有用,其目的是尽可能保持信息格式尽可能稳定,即使系统内部可能会改变结构。否则,一个更改意味着服务的所有订阅者也需要更改。
正如您所做的那样,这也是一种非正式的方法。但是,为什么不尝试使用以下方法将字典序列化为有线格式:
let dictionary : Dictionary = ["newNumbersArray":numberArray]
let data = NSJSONSerialization.dataWithJSONObject(dictionary, options: nil, error: nil)
let string = NSString(data: data!, encoding: NSUTF8StringEncoding)
从另一个同行的JSON回来:
var dictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as Dictionary
否则,如果您想继续使用非正式的序列化方法,您只需循环遍历集合中的每个项目,将其从字符串转换为整数,并将结果添加到另一个数组。 Underscore.m库提供了映射功能,因此您可以使用少量代码执行此操作。
答案 1 :(得分:0)
如果你还没有完成,那么试试这个
func handleReceivedDataWithNotification(notification:NSNotification){
let userInfo = notification.userInfo! as Dictionary
let receivedData:NSData = userInfo["data"] as NSData
let message = NSJSONSerialization.JSONObjectWithData(receivedData, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
//--
let arr = message.objectForKey("newNumbersArray") as NSMutableArray;
for (var i:Int = 0; i<arr.count; i++)
{
let n = arr[i] as Int;
NSLog("Value : %d", n);
}
}