使用 Alamofire 和 PromiseKit 使用 Swift 时出现 Void 错误(请求)

Posted

技术标签:

【中文标题】使用 Alamofire 和 PromiseKit 使用 Swift 时出现 Void 错误(请求)【英文标题】:Error on Void with Alamofire and PromiseKit with Swift (Request) 【发布时间】:2019-06-21 16:19:12 【问题描述】:

在我最近的项目中,我一直在使用 alamofire 和 promisekit 连接到我的 Web 服务现在我有两者的新版本,当我创建请求时出现此错误

Cannot convert value of type 'DataRequest' to closure result type 'Void'

当我尝试这样做时会发生这种情况:

func CallOne() -> Promise<[String: AnyObject]>
        return Promise
            fullfil,reject -> Void in
            return Alamofire.request(
                url_api,
                method: .get).responseJSON
                    response in
                    switch(response.result)
                    case .success(let res):
                        let data = res as? [String: AnyObject]
                        fullfil(data!)
                    case .failure(let error):
                        reject(error)
                    
            
        
    

当我尝试使用它时:

func CallTwo(email: String, phone: String) -> Promise<[String: AnyObject]>
    let params =
        ["email": email, "phone": phone]
    return Promise
        fullfil,reject -> Void in
        return Alamofire.upload(
            multipartFormData:  MultipartFormData in
                for (key, value) in params 
                    MultipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
                
        , to: url_api, method: .post)  (result) in
            switch (result)
            case .success(let upload, _, _):
                upload.responseJSON  response in
                    switch(response.result)
                    case .success(let res):
                        let data = res as? [String: AnyObject]
                        fullfil(data!)
                    case .failure(let error):
                        reject(error)
                    
                
            case .failure(let encodingError):
                print(encodingError)
            
        
    

我收到此错误Unable to infer closure type in the current context

我该如何解决?提前致谢

【问题讨论】:

【参考方案1】:

我用

解决了这个问题

密封

func CallOne() -> Promise<[String: AnyObject]>
    return Promise
        seal in
        return Alamofire.request(
            url_api,
            method: .get).responseJSON
                response in
                switch(response.result)
                case .success(let res):
                    let data = res as? [String: AnyObject]
                    seal.fulfill(data!)
                case .failure(let error):
                    seal.reject(error)
                
        
    


func CallTwo(email: String, phone: String) -> Promise<[String: AnyObject]>
    let params =
        ["email": email, "phone": phone]
    return Promise
        seal in
        return Alamofire.upload(
            multipartFormData:  MultipartFormData in
                for (key, value) in params 
                    MultipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
                
        , to: url_api, method: .post)  (result) in
            switch (result)
            case .success(let upload, _, _):
                upload.responseJSON  response in
                    switch(response.result)
                    case .success(let res):
                        let data = res as? [String: AnyObject]
                        seal.fulfill(data!)
                    case .failure(let error):
                        seal.reject(error)
                    
                
            case .failure(let encodingError):
                print(encodingError)
            
        
    

【讨论】:

以上是关于使用 Alamofire 和 PromiseKit 使用 Swift 时出现 Void 错误(请求)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Alamofire 和 PromiseKit 使用 Swift 时出现 Void 错误(请求)

使用 Swift 和 PromiseKit 链接 Alamofire 请求

创建基础服务的问题 <Alamofire,PromiseKit,Generic>

从 PromiseKit/Alamofire 返回一个 Promise

PromiseKit 没有回调/解除分配? (阿拉莫菲尔)

PromiseKit 3.0:用循环链接