无法将类型 '(Any) -> ()' 的值转换为预期的参数类型 '(_) -> _'

Posted

技术标签:

【中文标题】无法将类型 \'(Any) -> ()\' 的值转换为预期的参数类型 \'(_) -> _\'【英文标题】:Cannot convert value of type '(Any) -> ()' to expected argument type '(_) -> _'无法将类型 '(Any) -> ()' 的值转换为预期的参数类型 '(_) -> _' 【发布时间】:2018-09-08 13:22:43 【问题描述】:

安装 PromiseKit (6.2.1)。 Swift4.0。

import UIKit
import PromiseKit

class ViewController: UIViewController 
    func onFulfilled() -> (String) -> Promise<String> 
        return  result in
            return Promise<String>  seal in
                print(result)
                DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1), execute: 
                    seal.fulfill("Hello")
                )
            
        
    

    override func viewDidLoad() 
        super.viewDidLoad()

        Promise.value("first")
            .then(onFulfilled())
            .then(onFulfilled())
            .then(onFulfilled())
            .then  result in print(result)  // Cannot convert value of type '(Any) -> ()' to expected argument type '(_) -> _'
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
    

错误

无法将类型 '(Any) -> ()' 的值转换为预期的参数类型 '(_) -> _'

如何修复

如何修复.then result in print(result)

【问题讨论】:

【参考方案1】:

then 替换为done

_ = Promise.value("first")
            .then(onFulfilled())
            .then(onFulfilled())
            .then(onFulfilled())
            .done  result in print(result) 

见:https://github.com/mxcl/PromiseKit/blob/master/Documentation/GettingStarted.md

done 和 then 一样,但是你不能返回一个 Promise。它通常是链中“成功”部分的结束。

【讨论】:

以上是关于无法将类型 '(Any) -> ()' 的值转换为预期的参数类型 '(_) -> _'的主要内容,如果未能解决你的问题,请参考以下文章

无法将“DataResponse<Any>”类型的值转换为预期的参数类型“Data”

无法将“Swift.Array<Any>”类型的值转换为“Swift.Dictionary<Swift.String, Any>”

无法将“DataResponse<String>”类型的值转换为预期的参数类型“DataResponse<Any>”

无法转换类型“字典<String, Any>?”的值?到预期的参数类型“数据”

无法将类型“x”的值转换为预期的参数类型“[String:Any]”

无法使用“Any?”类型的索引为“[AnyHashable:Any]”类型的值下标