如何将 swift Dictionary 转换为 NSDictionary
Posted
技术标签:
【中文标题】如何将 swift Dictionary 转换为 NSDictionary【英文标题】:How do I convert swift Dictionary to NSDictionary 【发布时间】:2015-04-07 23:00:32 【问题描述】:我正在尝试将 [String : String]
(Swift 字典)转换为 NSDictionary
,以便以后在生成字符串的 JSON 库中使用
var parcelDict = ["trackingNumber" : parcel.number,
"dstCountry" : parcel.countryCode];
if (parcel.postalService != nil)
parcelDict["postalService"] = parcel.postalService;
var errorPtr: NSErrorPointer
let dict: NSDictionary = parcelDict
var data = NSJSONSerialization.dataWithJSONObject(dict, options:0, error: errorPtr) as NSData
return NSString(data: data, encoding: NSUTF8StringEncoding)
但是let dict: NSDictionary = parcelDict
不起作用
let dict: NSDictionary = parcelDict as NSDictionary
var data = NSJSONSerialization.dataWithJSONObject(parcelDict as NSMutableDictionary, options:0, error: errorPtr) as NSData
所有这些示例都不起作用。它们产生以下错误:
正确的做法是什么?
更新:
有效的代码
var parcelDict = ["trackingNumber" : parcel.number!,
"dstCountry" : parcel.countryCode!];
if (parcel.postalService != nil)
parcelDict["postalService"] = parcel.postalService;
var jsonError : NSError?
let dict = parcelDict as NSDictionary
var data = NSJSONSerialization.dataWithJSONObject(dict, options:nil, error: &jsonError)
return NSString(data: data!, encoding: NSUTF8StringEncoding)!
【问题讨论】:
【参考方案1】:你必须像这样投射它:
let dict = parcelDict as NSDictionary
否则 Swift Dictionary 和 NSDictionary 在用于 ex 的方法中的处理方式几乎相同:
func test(dict: NSDictionary)
let dict = ["Test":1]
test(dict)
完全可以正常工作。
更新后
如果您将 Dictionary 值类型更改为非可选字符串,那么您的错误就会消失。
[String:String?] change to -> [String:String]
【讨论】:
你的字典不是 [String:String] 它是 [String:String?] 真的没有必要在字典中有一个可选的值,除非你想仍然有没有引用的键。 我的建议是您只需将值更改为字符串而不是字符串? 谢谢!你能更新你的答案吗?我会接受的 在我刚刚过滤了 [String:String] 字典的情况下对我不起作用。必须遍历 [String:String] 字典,放入新的可变 [NSObject:AnyObject] 字典进行转换。【参考方案2】:你可以使用这个简单的方法
let dictSwift = ["key1": "value1", "key1": value2]
let dictNSMutable = NSMutableDictionary(dictionary: dictSwift)
享受编码!
【讨论】:
为我工作。谢谢【参考方案3】:不需要将其转换为NSDictionary
。只需使用:
var data = NSJSONSerialization.dataWithJSONObject(parcelDict, options:0, error: errorPtr) as NSData
在这篇文章中提到:Making a JSON object in Swift
编辑
从您的屏幕截图中,我相信您的问题在于您的 parcelDict
字典中的值类型。我可以使用以下代码重新创建错误:
let dict = [String: String?]()
let nsDict = dict as NSDictionary // [String: String?] is not convertible to NSDictionary
但是,使用String
而不是String?
作为值类型可以消除错误。
因此,在填充 parcelDict
时,也许您应该只添加不是 nil
的值。
【讨论】:
以上是关于如何将 swift Dictionary 转换为 NSDictionary的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JSON 转换为 Swift Dictionary 以进行 HTTP POST
将 JSON 转换为 Dictionary Swift 时出错
无法将“Swift.Array<Any>”类型的值转换为“Swift.Dictionary<Swift.String, Any>”
Swift 3 NSDictionary 到 Dictionary 的转换导致 NSInvalidArgumentException
如何在 Swift 中检索 NSURLRequest 的 HTTPBody 参数到 Dictionary: [NSObject: AnyObject]