将 NSDictionary 转换为 Swift 字典

Posted

技术标签:

【中文标题】将 NSDictionary 转换为 Swift 字典【英文标题】:Convert NSDictionary to Swift Dictionary 【发布时间】: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,您可以免费连接它们。跨度> 【参考方案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 不是免费的,请当心桥接。

以上是关于将 NSDictionary 转换为 Swift 字典的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 将 JSON 字符串转换为 NSDictionary

Swift - 无法将“__NSCFString”类型的值转换为“NSDictionary”

将 NSARRAY 转换为 NSDictionary 以用作 JSON 序列化 swift4 Xcode 9 [关闭]

将 JSON 字符串 UTF8 转换为 NSDictionary Swift

如何将 NSDictionary 转换为 Dictionary?

Firebase Swift 无法将“__NSArrayM”(0x10591cc30)类型的值转换为“NSDictionary”