【问题标题】:Alamofire 5: Value of type 'Result<Data, AFError>' has no member 'value'Alamofire 5:“结果<数据,AFError>”类型的值没有成员“值”
【发布时间】:2020-01-30 08:03:17
【问题描述】:

是 Alamofire 5 中的新错误吗?因为上次没有遇到错误。下面是完成的代码。任何使用过 Alamofire 的人都面临这个问题?

import Foundation
import Alamofire

class MyAppService {
static let shared = MyAppService()
let url = "http://127.0.0.1:5000"

private init() { }

func getCurrentUser(_ completion: @escaping (SomeRequest?) -> ()) {
    let path = "/somePath"
    AF.request("\(url)\(path)").responseData { response in
        if let data = response.result.value { //error shown here (Value of type 'Result<Data, AFError>' has no member 'value')
            let contact = try? SomeRequest(protobuf: data)
            completion(contact)
        }
        completion(nil)
    }
  }
}

【问题讨论】:

    标签: ios swift alamofire


    【解决方案1】:

    你也可以这样提取响应

    AF.request(url, method: HTTPMethod.get, parameters: param as? Parameters)
    .responseJSON { response in
          if let JSON = response.value {
              if response.response?.statusCode == 200{
                  completionHandler(JSON as AnyObject?, nil)
              }else if(response.response?.statusCode == 401){
                    completionHandler(JSON as AnyObject?, nil)
              }
          }
          else{
              if response.response?.statusCode == 401 {
                  SVProgressHUD.showInfo(withStatus: "Request timed out.")
              }
              else {
                  completionHandler(nil,response.error as NSError?)
              }
          }
     }
    

    【讨论】:

    • 这更符合提问者的代码示例,而不是像接受的答案那样添加完成处理程序。我在将我的 alamofire pod 从 4.something 更新到 5.something 后使用了它,它运行良好。
    【解决方案2】:

    您必须提取result 值如下,

    func getCurrentUser(_ completion: @escaping (SomeRequest?) -> ()) {
        let path = "/somePath"
        AF.request("\(url)\(path)").responseData { response in
            switch response.result {
            case .success(let value):
                print(String(data: value, encoding: .utf8)!)
                completion(try? SomeRequest(protobuf: value))
            case .failure(let error):
                print(error)
                completion(nil)
            }
        }
    }
    

    【讨论】:

    • SomeRequest 是什么? @卡姆兰
    • @GulsanBorbhuiya SomeRequest 只是完成后预期的对象类型。
    猜你喜欢
    • 1970-01-01
    • 2021-06-25
    • 2022-01-20
    • 1970-01-01
    • 2020-01-01
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    相关资源
    最近更新 更多