用于 keyPath 的 Alamofire responseArray 字符串数组

Posted

技术标签:

【中文标题】用于 keyPath 的 Alamofire responseArray 字符串数组【英文标题】:Alamofire responseArray String array for keyPath 【发布时间】: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
            
        
        ...

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

【问题讨论】:

【参考方案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
        
    

【讨论】:

以上是关于用于 keyPath 的 Alamofire responseArray 字符串数组的主要内容,如果未能解决你的问题,请参考以下文章

似乎无法使用 Alamofire 获取缓存的响应

Codable Arrays 和 Alamofire 的问题

使用 Alamofire 删除附加在 URL 末尾的 ?=

比较 alamofire 返回的错误对象

在 Alamofire 的参数中发送数组

使用 Alamofire 将对象作为参数发送