为什么我不能使用AlamoFire和SwiftyJson在swift中创建我的类的对象?

时间:2016-02-26 00:57:27

标签: ios swift alamofire swifty-json

我有一个从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)
}

现在,使用alamofireswiftyJson我正在尝试从我的网络服务中获取所有数据并创建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)
            }

    }
}

但是我收到了一个错误:

enter image description here

所以我的问题是 - 如何使用alamoFireSwiftyJson我可以创建自定义SingleRequest

2 个答案:

答案 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 ...
}