如何将 NSDictionary 转换为字典?
How do I convert NSDictionary to Dictionary?
我已经更新到 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>!
但是我收到了这个错误:
NSDictionary
in Objective-C 始终具有非可选值。
AnyObject
在 Swift 中变成了 Any
3.
- 考虑到前两个 "rules"
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
对于 NSDictionary
有问题的人,只需使用此扩展程序:
Swift 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
}
}
您只需要在 objc 中正确声明 NSDictionary
例如:NSDictionary<NSString *, NSString*>
在 swift 接口
中自动转换为 [String: String]
我已经更新到 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>!
但是我收到了这个错误:
NSDictionary
in Objective-C 始终具有非可选值。AnyObject
在 Swift 中变成了Any
3.- 考虑到前两个 "rules"
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
对于 NSDictionary
有问题的人,只需使用此扩展程序:
Swift 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
}
}
您只需要在 objc 中正确声明 NSDictionary
例如:NSDictionary<NSString *, NSString*>
在 swift 接口
[String: String]