我正在用Gloss替换Swify
JSON库.我将WS响应转换为
JSON格式时遇到问题.
在
SwiftyJSON中我这样做了:
guard let data = response.result.value else {
...
return
}
let jsonData = JSON(data)
我的回答如下:
[{
"lat": "45.2",
"lon": "-79.38333",
"name": "Sample"
}, {
"lat": "23.43",
"lon": "45.3",
"name": "Sample"
}]
我需要从这个创建一个JSON对象([JSON])数组,所以我可以在这个方法中使用:
let jsonArray = ?
guard let destinations = [Destination].fromJSONArray(jsonArray) else
{
...
return
}
我试过了:
guard let data = response.result.value as? [(String,AnyObject)] else {
...
return
}
和
guard let data = response.result.value as? [Gloss.JSON] else {
...
return
}
第一个说:不能将'[(String,AnyObject)]’类型的值转换为预期的参数类型'[JSON]’
第二:条件绑定的初始化程序必须具有可选类型,而不是'[目标]’
最佳答案 我遇到了与问题完全相同的“第一”和“第二”错误消息完全相同的问题.贝娄是我如何解决它的摘录:
import Gloss
import Alamofire
...
Alamofire.request(.GET, url, parameters: params).responseJSON {
response in switch response.result {
case .Success(let json):
// Here, stations is already an array of Station class
let stations = [Station].fromJSONArray(json as! [Gloss.JSON])
...
...
}
这就是我的Station类:
import Gloss
class Station: Decodable {
var id: Int = 0
var attribute1: Int = 0
var attribute2: Int = 0
init(id: Int, attribute1: Int, attribute2: Int) {
super.init()
self.id = id
self.attribute1 = attribute1
self.attribute2 = attribute2
}
required init?(json: JSON) {
super.init()
self.id = ("id" <~~ json)!
self.attribute1 = ("attribute1" <~~ json)!
self.attribute2 = ("attribute2" <~~ json)!
}
}