【问题标题】:Alamofire responseArray String array for keyPath用于 keyPath 的 Alamofire responseArray 字符串数组
【发布时间】:2017-08-31 18:55:20
【问题描述】:

我有一个 rest 调用,它返回 keyPath "data" 的字符串 [String] 数组,例如...

{
  "data": [
    "1",
    "3",
    "5",
    "2",
    "4",
    "9"
  ]
}

我正在尝试通过responseArray(keyPath: "data") 获取它,但在*.responseArray(keyPath: "data") {(response: DataResponse<[String]>) in* 行出现编译错误

无法将类型 '(DataResponse) -> ()' 的值转换为预期的参数类型 '(DataResponse) -> Void'

部分请求示例

alamofireManager.request(url)
        .responseArray(keyPath: "data") {(response: DataResponse<[String]>) in
        if response.result.isSuccess {
           if let data = response.result.value {
                //process success
            } else {
                // handle error
            }
        }
        ...

你们中有人知道怎么做吗?

【问题讨论】:

    标签: swift alamofire objectmapper


    【解决方案1】:

    问题在于 String 不可映射。根据https://github.com/Hearst-DD/ObjectMapper/issues/487,这些是建议的解决方案:

    在这种情况下,我建议直接从 Alamofire 响应中访问数据。您应该能够简单地将其转换为 [String]。

    或者,您可以将 String 子类化并使子类 Mappable,但是我认为这对于您的情况来说是不必要的工作


    使用 Swift 的 4 Codable(无外部依赖):

    struct APIResponse: Decodable {
        let data: [String]
    }
    
    let url = "https://api.myjson.com/bins/1cm14l"
    Alamofire.request(url).responseData { (response) in
    
        if response.result.isSuccess {
            if let jsonData = response.result.value,
                let values = try? JSONDecoder().decode(APIResponse.self, from: jsonData).data {
                //process success
                print(values)
            } else {
                // handle error
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      • 2013-06-18
      • 1970-01-01
      相关资源
      最近更新 更多