【问题标题】:Alamofire.request().responseObject doesn't return responseAlamofire.request().responseObject 不返回响应
【发布时间】:2016-12-27 08:12:06
【问题描述】:

我使用 AlamofireObjectMapper 扩展。我想得到回应,但它失败了。我的 tableLeague 对象始终为零,因为带有响应闭包的代码不会调用 ({ (response: DataResponse) in 如果 response.result.isSuccess { tableLeague = response.result.value } 不调用)。我使用下一个方法:

let header = ["X-Auth-Token":"1231231"]

static let sharedInstance = ServerAPI()
private func getRequest(uri: String) -> DataRequest {
    return Alamofire.request(uri, method: .get, headers: header)
}

public func getTableLeague() -> TableLeague {
    var tableLeague: TableLeague?
    getRequest(uri: URL).responseObject { (response: DataResponse<TableLeague>) in
        if response.result.isSuccess {
            tableLeague = response.result.value
        }
    }
    return tableLeague!
}

并在商务舱中使用:

public func readTableLeague() -> TableLeague {
    let tableLeague = ServerAPI.sharedInstance.getTableLeague()
    return tableLeague
}

我认为这可能是因为尚未响应,但我尝试设置尚未设置的对象

有什么问题吗?我需要使用其他的完成处理程序吗?

【问题讨论】:

标签: swift request response alamofire objectmapper


【解决方案1】:

请尝试按以下结构映射

class Response: Mappable {
    var success: Bool?
    var data: [Data]?

    required init?(_ map: Map) {
        mapping(map)
    }

    func mapping(map: Map) {
        success <- map["success"]
        data <- map["data"]
    }
}

class Data: Mappable {
    var uid: Int?
    var name: String?
    // add other field which you want to map        

    required init?(_ map: Map) {
        mapping(map)
    }

    func mapping(map: Map) {
        uid <- map["uid"]
        name <- map["name"]
    }
}

当你通过这种语法得到 JSON 响应的简单映射时

let response = Mapper<Response>().map(responseObject)
if let id = response?.data?[0].uid {
    println(id)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多