Alamofire responseArray keyPath的字符串数组

时间:2017-08-31 18:55:21

标签: swift alamofire objectmapper

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

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

我试图通过responseArray(keyPath: "data")获取它,但是获得了行*.responseArray(keyPath: "data") {(response: DataResponse<[String]>) in*的编译错误

  

无法转换类型的值&#39;(DataResponse&lt; [String]&gt;) - &gt; ()&#39;预期参数类型&#39;(DataResponse&lt; [_]&gt;) - &gt;空隙&#39;

请求示例的一部分

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

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

1 个答案:

答案 0 :(得分:1)

问题是String不是Mappable。根据{{​​3}},这些是建议的解决方案:

  

在这种情况下,我建议直接从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
        }
    }
}