Alamofire.request().responseObject 不返回响应

Posted

技术标签:

【中文标题】Alamofire.request().responseObject 不返回响应【英文标题】:Alamofire.request().responseObject doesn't return response 【发布时间】: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

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

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

【问题讨论】:

请添加更多关于您的问题的描述。 我添加更多描述。 这意味着您的 Mapper 类不会将响应映射到您的 TableLeague 类。请检查响应对象是否包含 JSON 对象。 是json对象 "_links": "self": "href":"api.football-data.org/v1/competitions/426/leagueTable/…" , "competition": "href":"api.football-data.org/v1/competitions/426" , "leagueCaption" :"Premier League 2016/17", "matchday":18, "standing":[ ... 【参考方案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)

【讨论】:

以上是关于Alamofire.request().responseObject 不返回响应的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 5 类型 'Request' 没有成员 'authorizationHeader'

更改 Alamofire.SessionManager 的 serverTrustPolicy 以仍然使用***便利方法,如 Alamofire.request

随机获取“网络连接丢失。”迅速使用“Alamofire.request”

不能调用 Alamofire.request(...)

Alamofire.request().responseObject 不返回响应

Alamofire.request 不与自定义对象映射