PromiseKit 6 错误无法转换错误

Posted

技术标签:

【中文标题】PromiseKit 6 错误无法转换错误【英文标题】:PromiseKit 6 error in cannot convert error 【发布时间】:2018-12-14 13:58:07 【问题描述】:

首先,我知道 v6 中的实现发生了变化,并且我按预期使用了 seal 对象,我遇到的问题是,即使按照字母的示例,它仍然会给我旧的Cannot convert value of type '(_) -> CustomerLoginResponse' to expected argument type '(_) -> _' 错误。

这是我返回承诺的函数:

 static func makeCustomerLoginRequest(userName: String, password: String) -> Promise<CustomerLoginResponse>

    return Promise
         seal in
            Alamofire.request(ApiProvider.buildUrl(), method: .post, parameters: ApiObjectFactory.Requests.createCustomerLoginRequest(userName: userName, password: password).toXML(), encoding: XMLEncoding.default, headers: Constants.Header)
                     .responseXMLObject  (resp: DataResponse<CustomerLoginResponse>) in
                if let error =  resp.error
                
                    seal.reject(error)
                
                guard let Xml = resp.result.value else 
                    return seal.reject(ApiError.credentialError)
                
                seal.fulfill(Xml)
            
    

这是使用它的函数:

static func Login(userName: String, password: String) 
    ApiClient.makeCustomerLoginRequest(userName: userName, password: password).then  data -> CustomerLoginResponse  in

    

【问题讨论】:

【参考方案1】:

如果您想链接多个promises,您可能需要提供更多信息。在v6 中,如果您不想继续promise 链,则需要使用.done。如果您只有一个 promise 与此请求,那么下面是正确的实现。

static func Login(userName: String, password: String) 
    ApiClient.makeCustomerLoginRequest(userName: userName, password: password)
         .done  loginResponse in
              print(loginResponse)
         .catch  error in
              print(error)
         

请记住,如果您使用的是 .then,则必须返回 promise,直到您使用 .done 断开链。如果你想链接多个promises,那么你的语法应该是这样的,

ApiClient.makeCustomerLoginRequest(userName: userName, password: password)
       .then  loginResponse -> Promise<CustomerLoginResponse> in
             return .value(loginResponse)
        .then  loginResponse -> Promise<Bool> in
             print(loginResponse)
             return .value(true)
        .then  bool -> Promise<String> in
             print(bool)
             return .value("hello world")
        .then  string -> Promise<Int> in
             print(string)
             return .value(100)
        .done  int in
             print(int)
        .catch  error in
             print(error)
        

【讨论】:

以上是关于PromiseKit 6 错误无法转换错误的主要内容,如果未能解决你的问题,请参考以下文章

PromiseKit ios Swift 闭包返回类型问题

Xcode中奇怪的promiseKit 6语法行为

PromiseKit 无法在链中命中

PromiseKit 分段错误:11

PromiseKit pod 安装正确,但 import PromiseKit 返回错误?

PromiseKit 6 在没有上下文类型的情况下无法解析对成员“值”的引用