如何将NSDictionary转换为字典?

dav*_*vid 8 dictionary nsdictionary swift objective-c-swift-bridge

我已经更新到XCode 8,现在我需要将我的代码从Swift 2转换为Swift 3.

以前,当我想转换NSDictionaryDictionary,我只是写了以下内容:

let post_paramsValue = post_params as? Dictionary<String,AnyObject?>
Run Code Online (Sandbox Code Playgroud)

哪里post_paramsNSDictionary.

但是现在使用Swift 3,我收到了这个错误:

NSDictionary is not convertible to Dictionary
Run Code Online (Sandbox Code Playgroud)

为什么?改变了什么?


编辑1

我也尝试过以下方法:

let post_paramsValue = post_params as Dictionary<String,Any>
Run Code Online (Sandbox Code Playgroud)

但是这给出了这个错误:

'NSDictionary的!'  不能转换为'Dictionary <String,Any>';  你的意思是使用<code>NSDictionary</code>而不是<code>NSDictionary!</code>,但它不起作用; 我收到了这个错误:</p>

<p><a rel='NSDictionary'不能转换为'Dictionary <String,Any>';  你的意思是使用<code> as!</ code>强制转发?


编辑3

我也尝试过以下方法:

let post_paramsValue =  post_params as Dictionary<String,Any>
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误:

'NSDictionary的!'  不能转换为'Dictionary <String,Any>!';  你的意思是使用<code> as!</ code>强制转发?

vad*_*ian 15

  • NSDictionary 在Objective-C中始终具有非可选值.
  • AnyObject已经成为AnySwift 3.
  • 考虑到前两个"规则" NSDictionary可以桥接到Dictionary

let post_paramsValue = post_params as Dictionary<String,Any>
Run Code Online (Sandbox Code Playgroud)

如果源NSDictionary是一个可选您可能使用as Dictionary<String,Any>?as? Dictionary<String,Any>as! Dictionary<String,Any>as Dictionary<String,Any>!根据实际类型的NSDictionary