嵌套Alamofire请求

时间:2015-08-18 15:37:05

标签: ios iphone swift alamofire

我正在进行嵌套的Alamofire请求并使用返回的数据填充我的类属性对象。第一个Alamofire请求有效,我可以在第一个Alamofire请求中向我的类对象注入数据,但第二个请求,虽然我看到从我的API返回的数据,但我无法将数据附加到我的类属性,这是一个数组如果是城市。

 // Get States
getStatesByUserID(userID) {
    (result)->() in
    var states = JSON(result)
    for index in 0... states.count - 1 {
        let statesID: Int = states[index]["stateID"].intValue
        let statesName: String = states[index]["title"].stringValue


        // Get Cities by State ID
        self.getCities(stateID) {
            (result) -> () in
            let cities = JSON(result)
            for index in 0...cities.count - 1 {
                let cityID: Int = cities[index]["cityID"].intValue
                let cityName: String = cities[index]["title"].stringValue

                //Append a single city into cities array
                self.city.append(City(id: cityID, name: cityName))
            }
        }

        // Append a single state that contains cities and zips into states array
        self.state.append(State(id: stateID, name: stateName, city:self.city ))
    }
}
self.tableView.reloadData()
}

1 个答案:

答案 0 :(得分:0)

Alamofire异步工作,如果您的第二个请求取决于第一个请求并且您尝试在同一个回调中附加数据,则可能是您要求尚未检索到的数据。如果是这种情况,你可以等到第一个请求完成他的工作,例如:

   public func SendPicAndSig(ip: String, enerImg: EnerImage, callBack:((JSONData:JSON)->Void)?){
    let address:String = "http://\(ip)/Enercard.Service/api/UploadFiles"

    let serial =  JSONSerializer.toJson(enerImg)
    let _parametros = JSONSerializer.toDictionary(serial) as! [String : AnyObject]

    debugPrint(_parametros)
    Alamofire.request(.POST,address, parameters: _parametros, encoding:.JSON)
        .responseJSON { _,_,result in
            switch result
            {
            case .Success(let data):
                //posible handling de error de parte del servidor
                debugPrint(result.data)
                  callBack?(JSONData: JSON(data))
            default:()
                break
            }
    }
}

这里我有一个用于发送和对象的示例函数,我将CallBack用作参数,这个回调方法只有在成功检索数据时才会运行,所以我以后可以将此函数称为

SendPicAndSif("10.11.1.217" , Image("random-path"),SecondRequest)

其中" SecondRequest"如果我检索第一个请求的数据,那将是我将运行的函数

SecondRequest(jsonarray:JSON)
{
  //second  Alamofire request
}