【问题标题】:NSString to Array Integer Swift XcodeNSString 到数组整数 Swift Xcode
【发布时间】:2014-11-15 06:25:43
【问题描述】:

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

【问题讨论】:

  • 你到底想做什么?在这里分享你的一些代码。
  • 在接收代码中,记录消息并在此处显示。
  • { nyeTall1 = (51,39,47,53,40,68,25,13,48 ); } 每个数字都换行

标签: arrays swift nsstring xcode6


【解决方案1】:

在不同系统之间“通过线路”发送信息有两种主要方法:第一种称为序列化,第二种称为编组。

序列化:

信息按照约定被编码成有线格式。在现代 Cocoa 中,最常见的序列化类型是 plist 和 JSON。

编组:

封送处理类似于序列化,除了它允许使用映射文件覆盖默认行为。这对于合约优先开发很有用,其目的是尽量保持信息格式尽可能稳定,即使系统内部可能会改变结构。否则,一项更改将意味着服务的所有订阅者也需要更改。

还有一种非正式的方法。但是为什么不尝试使用以下方法将字典序列化为有线格式:

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 库提供了一个映射函数,这样您就可以用更少的代码完成此操作。

【讨论】:

    【解决方案2】:

    如果你还没有完成,那么试试这个

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      相关资源
      最近更新 更多