【问题标题】:How do I convert NSDictionary to Dictionary?如何将 NSDictionary 转换为 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>!

但是我收到了这个错误:

【问题讨论】:

  • @UmairAfzal 感谢您的评论,但为什么我需要使用循环遍历字典,这不方便,为什么苹果需要让事情变得更难?
  • 嗯,我不知道为什么,你试过吗?它是否有效?
  • @UmairAfzal 我没有尝试过,我很确定它会起作用,但这并不方便。我需要用最好的方法来做。谢谢

标签: swift dictionary nsdictionary objective-c-swift-bridge


【解决方案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]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-01
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 2011-05-18
      • 1970-01-01
      • 2011-11-10
      相关资源
      最近更新 更多