【问题标题】:Update to Xcode 12: Cannot convert value of type 'DataRequest' to closure result type 'Void'更新到 Xcode 12:无法将类型“DataRequest”的值转换为闭包结果类型“Void”
【发布时间】:2020-09-18 14:48:30
【问题描述】:

我正在使用 AlamoFire 和 PromiseKit 进行 API 调用。

在我更新到 Xcode 12.0 之前,代码运行良好 2 年。

函数现在返回错误:“无法将 'DataRequest' 类型的值转换为闭包结果类型 'Void'”

我的功能如下:

   func fetchArticlesFromApi (API: String) -> Promise<[Article]> {
    return Promise<[Article]> { seal in
        return Alamofire.request(API).validate().responseString(completionHandler: { //Error happening here
            response in
            switch (response.result) {
            case .success(let responseString1):
                //Do something
            case .failure(let error):
                print (error)
                seal.reject(error)
            }
        })
    }
}

第三行函数发生错误 有什么想法在此更新中可能发生了哪些变化?

注意:当我在 xcode 11.6 上运行相同的代码时,代码运行良好!

【问题讨论】:

  • 尝试更新您的 pod。

标签: ios swift alamofire promisekit


【解决方案1】:

我在 Github 上找到了答案。

https://github.com/mxcl/PromiseKit/issues/1165

我不应该试图从传递给 Promise.init 的闭包中返回任何东西。 奇怪的是它在以前版本的 Xcode 中是如何工作的。

为了解决这个问题,我必须用 _ = 替换 Alamofire.request... 前面的返回值

函数现在看起来像这样:

    func fetchArticlesFromApi (API: String) -> Promise<[Article]> {
    return Promise<[Article]> { seal in
        _ = AF.request(API).validate().responseString(completionHandler: {
            response in
            switch (response.result) {
            case .success(let responseString1):
            //Do something
            case .failure(let error):
                print (error)
                seal.reject(error)
            }
        })
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    相关资源
    最近更新 更多