如何将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值。