我正在用Gloss替换SwifyJSON库。我将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]' 第二:条件绑定的初始化程序必须具有可选类型,而不是'[目标]'
答案 0 :(得分:1)
我遇到与问题完全相同的“第一个”和“第二个”错误消息完全相同的问题。贝娄是我如何解决它的摘录:
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)!
}
}
答案 1 :(得分:0)
按照文档(特别是here),我在我的一个项目中做了这个(简化以消除干扰):
//iOS 9.3, Xcode 7.3
/// stripped-down version
struct Event: Decodable {
var id: String?
init?(json: JSON) {
id = "id" <~~ json
}
}
//...
func getEvents(completion: (AnyObject?) -> Void) {
request(.GET, baseURL + endpointURL)
.responseJSON { response in
switch response.result {
case .Failure(let error):
print(error.localizedDescription)
case .Success:
guard let value = response.result.value as? JSON,
let eventsArrayJSON = value["events"] as? [JSON] //Thus spake the particular API's docs
else { fatalError() }
let events = [Event].fromJSONArray(eventsArrayJSON)
// do stuff with my new 'events' array of type [Events]
}
}
}
神奇的是将Gloss fromJSONArray
[1]与Alamofire的.responseJSON
序列化器[2]结合起来。
[1]由init?(json: JSON)
协议支持Decodable
。
[2]吐出一个Gloss-y JSON
- 类型的对象,又称[String : AnyObject]
- 类型。
希望这会有所帮助。 :)
另请查看这个新的cocoapod:Alamofire-Gloss