如何将 swift 字典转换为 NSDictionary
How do I convert swift Dictionary to NSDictionary
我正在尝试将 [String : String]
(Swift 字典)转换为 NSDictionary
,以便稍后在生成字符串 [=] 的 JSON 库中使用19=]
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
否则 Swift Dictionary 和 NSDictionary 在 ex:
的方法中使用时的处理方式几乎相同
func test(dict: NSDictionary) {}
let dict = ["Test":1]
test(dict)
完全可以正常工作。
更新后
如果您将 Dictionary 值类型更改为非可选字符串,那么您的错误就会消失。
[String:String?] change to -> [String:String]
不需要将其转换为 NSDictionary
。只需使用:
var data = NSJSONSerialization.dataWithJSONObject(parcelDict, options:0, error: errorPtr) as NSData
在这个post中提到:
编辑
根据您的屏幕截图,我认为您的问题出在 parcelDict
字典中的值类型。我可以使用以下代码重新创建错误:
let dict = [String: String?]()
let nsDict = dict as NSDictionary // [String: String?] is not convertible to NSDictionary
但是,使用 String
而不是 String?
作为值类型可以消除错误。
因此,在填充 parcelDict
时,也许您应该只向其中添加不是 nil
.
的值
你可以使用这个简单的方法
let dictSwift = ["key1": "value1", "key1": value2]
let dictNSMutable = NSMutableDictionary(dictionary: dictSwift)
享受编码吧!
我正在尝试将 [String : String]
(Swift 字典)转换为 NSDictionary
,以便稍后在生成字符串 [=] 的 JSON 库中使用19=]
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
否则 Swift Dictionary 和 NSDictionary 在 ex:
的方法中使用时的处理方式几乎相同func test(dict: NSDictionary) {}
let dict = ["Test":1]
test(dict)
完全可以正常工作。
更新后
如果您将 Dictionary 值类型更改为非可选字符串,那么您的错误就会消失。
[String:String?] change to -> [String:String]
不需要将其转换为 NSDictionary
。只需使用:
var data = NSJSONSerialization.dataWithJSONObject(parcelDict, options:0, error: errorPtr) as NSData
在这个post中提到:
编辑
根据您的屏幕截图,我认为您的问题出在 parcelDict
字典中的值类型。我可以使用以下代码重新创建错误:
let dict = [String: String?]()
let nsDict = dict as NSDictionary // [String: String?] is not convertible to NSDictionary
但是,使用 String
而不是 String?
作为值类型可以消除错误。
因此,在填充 parcelDict
时,也许您应该只向其中添加不是 nil
.
你可以使用这个简单的方法
let dictSwift = ["key1": "value1", "key1": value2]
let dictNSMutable = NSMutableDictionary(dictionary: dictSwift)
享受编码吧!