如何将swift Dictionary转换为NSDictionary
我试图将一个[String : String]
(一个Swift字典)转换为NSDictionary
,稍后用于生成一个string的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)!
你必须像这样施放它:
let dict = parcelDict as NSDictionary
否则,在ex的方法中使用Swift Dictionary和NSDictionary几乎是一样的:
func test(dict: NSDictionary) {} let dict = ["Test":1] test(dict)
将工作完全正常。
更新后
如果您将字典值types更改为非可选string,那么您的错误将消失。
[String:String?] change to -> [String:String]
你可以使用这个简单的方法
let dictSwift = ["key1": "value1", "key1": value2] let dictNSMutable = NSMutableDictionary(dictionary: dictSwift)
享受编码!
不需要将其转换为NSDictionary
。 只要使用:
var data = NSJSONSerialization.dataWithJSONObject(parcelDict, options:0, error: errorPtr) as NSData
在这篇文章中提到: 在Swift中创build一个JSON对象
编辑
从你的截图中,我相信你的问题在于你的parcelDict
字典中的值types。 我可以用下面的代码重新创build错误:
let dict = [String: String?]() let nsDict = dict as NSDictionary // [String: String?] is not convertible to NSDictionary
但是,使用一个String
而不是一个String?
因为值types会消除错误。
因此,在填充parcelDict
也许你只需要添加一个不nil
值。