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

标签 swift xcode alamofire promisekit alamofire-request

在我的上一个项目中,我一直使用 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)
            }
        }
    }
}

我收到此错误无法推断当前上下文中的闭包类型

我该如何解决这个问题?提前致谢

最佳答案

我使用解决这个问题

seal in

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)
            }
        }
    }
}

关于swift - 使用 Alamofire 和 PromiseKit 使用 Swift 时出现 Void 错误(请求),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56707176/

相关文章:

Swift 4 - 如何使用缓存加载图像?

ios - 静态单元格上的 UIButton 未调用操作

iphone - 图标没有出现在 Xcode 存档中?

iphone - iOS 漫画阅读器 - 这是一个可行的设计吗?

ios - 带有 SwiftyJSON 参数的 Alamofire 请求

ios - 应用程序运行时在后台下载和刷新数据

json - Swift:无法解析对模型的 JSON 响应

ios - 根据字符集的任意字符分割字符串

ios - 通过访问图像的标签以编程方式删除图像

ios - Swift 中的无响应流委托(delegate)