将 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
【问题讨论】:
在引擎盖下 SwiftDictionary
实际上是一个 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】:NSDictionary
和 Dictionary
几乎可以互换。所以没有必要,但是你可以:
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”