NSString to Array Integer Swift Xcode

时间:2014-11-15 06:25:44

标签: arrays swift nsstring xcode6

我正在使用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?

将其转换回数组

2 个答案:

答案 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);
    }
}