【问题标题】:Using Alamofire with .publishDecodable将 Alamofire 与 .publishDecodable 一起使用
【发布时间】:2020-08-24 04:25:40
【问题描述】:

我需要和Result一起使用.publishDecodable,我跟着instructions,但是我遇到了这个错误:“generic parameter 't' could not be inferred closure”

@Published var loginModel: [LoginModel] = [LoginModel]()

var cancellation: AnyCancellable?

func request<T: Codable>(_ url: String, method: HTTPMethod = .get, headers: HTTPHeaders? = nil, parameters: Codable? = nil) -> AnyPublisher<Result<T, AFError>, Never> {
    let publisher = AF.request(url, method: method, headers: headers)
        .validate()
        .publishDecodable(type: T.self)
    return publisher.result()
}

 func login(email: String, password: String) {
    let parameters = LoginParameters(
        email: email,
        password: password
    )

    cancellation = request(serverURL + "login", method: .post, parameters: parameters)
        .sink { [self] response in
            switch response {
            case .success:
                loginModel = response.value()
            case .failure(error):
                print(error)
            }
        }
}

【问题讨论】:

    标签: swift alamofire combine


    【解决方案1】:

    您应该帮助编译器推断 T 类型以提供您期望的 response 类型。例如,您对request(_:method:headers:parameters:) 函数的调用可能如下所示:

    cancellation = request(serverURL + "login", method: .post, parameters: parameters)
        .sink { [self] (response: Result<[LoginModel], AFError>) in
            switch response {
            case .success(let value):
                self.loginModel = value
            case .failure(let error):
                print(error)
            }
        }
    

    或者,如果您愿意,可以像这样指定 request(_:method:headers:parameters:) 函数的返回类型:

    let publisher: AnyPublisher<Result<[LoginModel], AFError>, Never>
    publisher = request(serverURL + "login", method: .post, parameters: parameters)
    cancellation = publisher.sink { [self] response in
        switch response {
        case .success(let value):
            self.loginModel = value
        case .failure(let error):
            print(error)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-27
      • 2016-02-25
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多