Ber*_*rgP 10 nsdictionary ios swift
我正在尝试将[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)
Run Code Online (Sandbox Code Playgroud)
但let dict: NSDictionary = parcelDict不起作用
let dict: NSDictionary = parcelDict as NSDictionary
var data = NSJSONSerialization.dataWithJSONObject(parcelDict as NSMutableDictionary, options:0, error: errorPtr) as NSData
Run Code Online (Sandbox Code Playgroud)
所有这些例子都不起作用.它们会产生以下错误:


这样做的正确方法是什么?
更新:
有效的代码
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)!
Run Code Online (Sandbox Code Playgroud)
Arb*_*tur 16
你必须这样投:
let dict = parcelDict as NSDictionary
Run Code Online (Sandbox Code Playgroud)
否则,在ex方法中使用Swift Dictionary和NSDictionary时,它们的处理方式几乎相同:
func test(dict: NSDictionary) {}
let dict = ["Test":1]
test(dict)
Run Code Online (Sandbox Code Playgroud)
会完全正常工作.
更新后
如果将Dictionary值类型更改为非可选String,则错误将消失.
[String:String?] change to -> [String:String]
Run Code Online (Sandbox Code Playgroud)
您可以使用这种简单的方法
let dictSwift = ["key1": "value1", "key1": value2]
let dictNSMutable = NSMutableDictionary(dictionary: dictSwift)
Run Code Online (Sandbox Code Playgroud)
享受编码!
| 归档时间: |
|
| 查看次数: |
21735 次 |
| 最近记录: |