如何将 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_paramsNSDictionary

但是现在使用 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&lt;String,Any&gt;?as? Dictionary&lt;String,Any&gt;as! Dictionary&lt;String,Any&gt;as Dictionary&lt;String,Any&gt;!,具体取决于NSDictionary 的实际类型

【讨论】:

感谢您的回答,但我之前尝试过但没有成功,我已经编辑了问题 然后使用强制转换运算符as!,因为源字典是可选的。 再次感谢,为什么我不能使用这个:让 post_paramsValue = post_params as Dictionary 你也可以使用它 考虑将NSDictionary 声明为非可选的。【参考方案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&lt;NSString *, NSString*&gt; 在 swift 界面中自动转换为 [String: String]

【讨论】:

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

如何将 NSManagedObject 转换为 NSDictionary

如何将 NSDictionary 转换为 Dictionary?

如何将 NSString 转换为 NSDictionary?

如何将 swift Dictionary 转换为 NSDictionary

如何将 Json 转换为 NSDictionary? [关闭]

如果将一个NSObject从NSDictionary转换为NSString?