代码之家  ›  专栏  ›  技术社区  ›  Dima Deplov

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

  •  3
  • Dima Deplov  · 技术社区  · 9 年前

    我想在需要时使用函数作为另一个函数的补全。但我有一个用代码来描述的问题:

    ...{
       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)?'

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

    那么,有办法解决它吗?我觉得我错过了 completion: (() -> Void)? 类型

    1 回复  |  直到 9 年前
        1
  •  5
  •   NobodyNada    9 年前

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

    myCompletion = myCompletionFunction()
    

    您没有分配 我的完成 myCompletionFunction ; 你在打电话 myCompletion函数 并将其返回值分配给 我的完成 ,导致类型不匹配。

    将该行更改为:

    myCompletion = myCompletionFunction