我有一个从swift中的json节点创建对象的函数:
class func fromJSON(json: JSON) -> SingleRequest? {
var title: String
if let titleOrNil = json["title"].string {
title = titleOrNil
} else {
title = ""
}
let locationName = json["location"].string
let discipline = json["discipline"].string
let lat = json["location"]["coordinates"][1].doubleValue
let lon = json["location"]["coordinates"][0].doubleValue
let coordinate = CLLocationCoordinate2D(latitude: lat, longitude: lon)
return SingleRequest(title: title, locationName: locationName!, discipline: discipline!, coordinate: coordinate)
}
现在,使用alamofire
和swiftyJson
我正在尝试从我的网络服务中获取所有数据并创建SingleRequest
个对象。我这样做如下所示:
func fetchRequests(radius: Double, lat: Double, lon: Double){
Alamofire.request(.GET, "https://mywebservice")
.responseJSON { response in
switch response.result {
case .Success:
if let jsonData = response.result.value {
for requestJSON in jsonData {
if let request = SingleRequest.fromJSON(requestJSON){
//do sth with a single request here
//e.g. print(request.discipline)
}
}
}
case .Failure(let error):
print("SWITCH ERROR")
print(error)
}
}
}
但是我收到了一个错误:
所以我的问题是 - 如何使用alamoFire
和SwiftyJson
我可以创建自定义SingleRequest
?
答案 0 :(得分:1)
你的问题在这里:
if let jsonData = response.result.value {
for requestJSON in jsonData {
if let request = SingleRequest.fromJSON(JSON(requestJSON)){
//do sth with a single request here
//e.g. print(request.discipline)
}
}
}
jsonData
是您需要投放到AnyObject
的{{1}}:
[[String: AnyObject]]
错误的含义是,由于if let jsonData = response.result.value as? [[String: AnyObject]] {
for requestJSON in jsonData {
if let request = SingleRequest.fromJSON(requestJSON){
//do sth with a single request here
//e.g. print(request.discipline)
}
}
}
默认为response.result.value
,因此不可迭代。这就是为什么你需要把它投射到一个数组(例如一个字典数组:AnyObject
)。
答案 1 :(得分:0)
不可否认,我不知道什么是“类型”response.result.value,但是如果它可以被转换为可以迭代的东西,那么这是一个例子:
if let jsonData = response.result.value as? [(some type that can be iterated)] {
// do something with jsonData ...
}