【发布时间】:2016-12-04 18:48:26
【问题描述】:
我尝试使用 Swift 3、Gloss 1.1 和 Alamofire 4.0 解码来自 webrequest 的 json 对象: json 响应如下所示:
{
"code": "0",
"message": "OK.",
"data": [
{
"timestamp": 1480885860,
"open": 10.99
},
{
"timestamp": 1480886040,
"open": 11
}
]
}
我的json Decodables是以下两个:
struct ResponseJsonModel : Decodable {
let code : Int
let message : String
let data : [MarketPriceJsonModel]?
// <~~
init?(json: JSON) {
guard let codeInt : Int = "code" <~~ json else {
print("code unwrapping failed in guard")
return nil
}
guard let messageStr : String = "message" <~~ json else {
print("message unwrapping failed in guard")
return nil
}
self.code = codeInt
self.message = messageStr
self.data = "data" <~~ json
}
}
struct MarketPriceJsonModel : Decodable {
let timestamp : NSDate
let open : Double
init?(json: JSON) {
guard let timestampInt : Int = "timestamp" <~~ json else {
print("timestamp unwrapping failed in guard")
return nil
}
guard let open : Double = "open" <~~ json else {
print("open price unwrapping failed in guard")
return nil
}
self.timestamp = NSDate(timeIntervalSince1970: Double(timestampInt))
self.open = open
}
}
我是 Gloss 新手,不明白为什么我的可解码对象初始化失败。
Alamofire.request(url).validate().responseJSON { response in
switch response.result {
case .success:
guard let value = response.result.value as? JSON,
let responseModel = ResponseJsonModel(json: value) else {
print("responseModel failed")
return
}
print(responseModel.message)
case .failure(let error):
print(error)
}
}
代码的输出是
代码解包失败
responseModel 失败
但是为什么?
当我在 init?() 中添加断点并查看调试区域中的 json 变量时,请求看起来正常但解析失败。
有没有办法在出现故障时获得更好的异常消息?
任何意见表示赞赏。
【问题讨论】: