Swift:如何将函数类型值设置为可选变量?

Dim*_*lov 3 variables function optional-parameters ios swift

我想在需要时使用函数作为另一个函数的完成.但是我遇到了最好用代码描述的麻烦:

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

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

func myCompletionFunction() {
...
}
Run Code Online (Sandbox Code Playgroud)

我有一个错误: Cannot assign a value of type '()' to a value of type '(()->Void)?'

我尝试as! (() -> Void)?在将函数设置为myCompletion变量后添加,但收到另一个错误Cannot downcast from '()' to a more optional type '(()->Void)?'

那么,有没有办法解决它?我有一种感觉,我错过了completion: (() -> Void)?类型的东西.

Nob*_*ica 5

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

myCompletion = myCompletionFunction()
Run Code Online (Sandbox Code Playgroud)

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

将该行更改为:

myCompletion = myCompletionFunction
Run Code Online (Sandbox Code Playgroud)

  • @flinth我不认为这是一个愚蠢的错误.我认为这是一个措辞不好的错误信息.它也是自动"修复它"建议的一个很好的候选者. (2认同)