我想在需要时将函数用作另一个函数的完成。但是我有一个最好用代码描述的麻烦:

...{
   var myCompletion : (() -> Void)? = nil
   if condition {
       myCompletion = myCompletionFunction() // <==========problem here
   }
   someMethodThatCouldHaveCompletion(myCompletion)
   ...
}

func someMethodThatCouldHaveCompletion(completion: (() -> Void)?){
...
}

func myCompletionFunction() {
...
}

我有一个错误:Cannot assign a value of type '()' to a value of type '(()->Void)?'
我尝试在将函数设置为myCompletion变量后添加as! (() -> Void)?,但收到另一个错误Cannot downcast from '()' to a more optional type '(()->Void)?'
那么,有办法解决吗?我有一种想念completion: (() -> Void)?类型的东西的感觉。

最佳答案

myCompletion的类型很好,问题在这里:

myCompletion = myCompletionFunction()

您没有将myCompletion分配给myCompletionFunction;您正在调用myCompletionFunction并将其返回值分配给myCompletion,从而导致类型不匹配。

将该行更改为:
myCompletion = myCompletionFunction

10-08 06:05