如何将 NSDictionary 转换为 Dictionary?
Posted
技术标签:
【中文标题】如何将 NSDictionary 转换为 Dictionary?【英文标题】:How do I convert NSDictionary to Dictionary? 【发布时间】:2016-11-01 10:48:28 【问题描述】:我已经更新到 XCode 8,现在我需要将我的代码从 Swift 2 转换为 Swift 3。
之前,当我想将NSDictionary
转换为Dictionary
时,我只是写了以下内容:
let post_paramsValue = post_params as? Dictionary<String,AnyObject?>
其中post_params
是NSDictionary
。
但是现在使用 Swift 3,我收到了这个错误:
NSDictionary is not convertible to Dictionary
为什么?有什么变化?
编辑 1
我还尝试了以下方法:
let post_paramsValue = post_params as Dictionary<String,Any>
但这给出了这个错误:
编辑 2
我还尝试了以下方法:
let post_paramsValue = post_params as Dictionary<String,Any>
我声明NSDictionary
而不是NSDictionary!
,但它不起作用;我收到了这个错误:
编辑 3
我还尝试了以下方法:
let post_paramsValue = post_params as Dictionary<String,Any>!
但是我收到了这个错误:
【问题讨论】:
试过这个吗? ***.com/questions/31765875/… @UmairAfzal 感谢您的评论,但为什么我需要使用循环遍历字典,这不方便,为什么苹果需要让事情变得更难? 嗯,我不知道为什么,你试过吗?它是否有效? @UmairAfzal 我没有尝试过,我很确定它会起作用,但这并不方便。我需要用最好的方法来做。谢谢 【参考方案1】: Objective-C 中的NSDictionary
始终具有非可选值。
AnyObject
在 Swift 3 中已变为 Any
。
考虑到前两个“规则”NSDictionary
可以桥接到Dictionary
let post_paramsValue = post_params as Dictionary<String,Any>
如果源NSDictionary
是可选的,您可以使用as Dictionary<String,Any>?
或as? Dictionary<String,Any>
或as! Dictionary<String,Any>
或as Dictionary<String,Any>!
,具体取决于NSDictionary
的实际类型
【讨论】:
感谢您的回答,但我之前尝试过但没有成功,我已经编辑了问题 然后使用强制转换运算符as!
,因为源字典是可选的。
再次感谢,为什么我不能使用这个:让 post_paramsValue = post_params as DictionaryNSDictionary
声明为非可选的。【参考方案2】:
对于NSDictionary
有问题的人,只需使用这个扩展:
斯威夫特 3.0
extension NSDictionary
var swiftDictionary: Dictionary<String, Any>
var swiftDictionary = Dictionary<String, Any>()
for key : Any in self.allKeys
let stringKey = key as! String
if let keyValue = self.value(forKey: stringKey)
swiftDictionary[stringKey] = keyValue
return swiftDictionary
【讨论】:
【参考方案3】:你只需要在objc中正确声明NSDictionary
例如:NSDictionary<NSString *, NSString*>
在 swift 界面中自动转换为 [String: String]
【讨论】:
以上是关于如何将 NSDictionary 转换为 Dictionary?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 NSManagedObject 转换为 NSDictionary
如何将 NSDictionary 转换为 Dictionary?
如何将 NSString 转换为 NSDictionary?
如何将 swift Dictionary 转换为 NSDictionary