【问题标题】:Convert NSDictionary to Swift Dictionary将 NSDictionary 转换为 Swift 字典
【发布时间】:2014-07-04 08:01:01
【问题描述】:

现在我知道当 swift 编译时它只是生成一个 NSDictionary,但是 NSDictionary 和 Swift 字典有不同的语法。有没有办法(通过循环或其他方式)将 NSDictionary 转换为 <key, value> 的相同类型的 swift 字典?

有没有办法将它转换为 Swift 字典而不是 NSDictionary?

let jsonDict = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as NSDictionary

【问题讨论】:

  • 在引擎盖下 Swift Dictionary 实际上是一个 Obj-C NSMutableDictionary,您可以免费连接它们。跨度>

标签: dictionary swift nsdictionary nsmutabledictionary


【解决方案1】:

使用:

let jsonDic = NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers, error: &error) as Dictionary<String, AnyObject>;

【讨论】:

  • 出于某种原因,这对我不起作用。对我有用的是let b = d as [NSObject:AnyObject]
  • 对于 SWIFT 3,您可以使用 JSONSerialization。
【解决方案2】:

我从http://www.swift-studies.com/blog/2014/6/6/loading-a-swift-dictionary-from-a-plist-file找到答案

var swiftDict : Dictionary<String,AnyObject!> = Dictionary<String,AnyObject!>()
for key : AnyObject in ocDictionary.allKeys {
    let stringKey = key as String 
    if let keyValue = ocDictionary.valueForKey(stringKey){
        swiftDict[stringKey] = keyValue
    }
}

【讨论】:

  • 也许在某些非常特殊的情况下可能会得到回报,但我不认为制作 NSDictionary 的浅拷贝在内存、cpu 和电池使用方面的开销有任何真正的优势。由于您可以将 NSDictionary 用作常规字典,因此几乎不存在差异。
【解决方案3】:

NSDictionaryDictionary 几乎可以互换。所以没有必要,但是你可以:

let jsonDict = (NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as NSDictionary) as Dictionary

【讨论】:

  • 它们是什么?可以与同行互换吗?是的。
  • 我一直不得不在任何地方输入as NSString,但我不喜欢as String。也许这是因为我定义了jsonDict : [[String:AnyObject]]
  • 我相信,当从 AnyObject 转到任何东西时,你必须强制转换它。
  • 如果 NSDictionary 到 Dictionary 不是免费的,请当心桥接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
  • 2016-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多