【问题标题】:Swift: how to set function type value to optional variable?Swift:如何将函数类型值设置为可选变量?
【发布时间】:2015-03-17 23:39:10
【问题描述】:

我想在需要时将函数用作另一个函数的完成。但我有一个问题,最好用代码来描述:

...{
   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 '(()-&gt;Void)?'

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

那么,有没有办法解决呢?我有一种感觉,我想念completion: (() -&gt; Void)? 类型的东西。

【问题讨论】:

  • 你需要myCompletionFunction后面的()吗?您不是将函数分配给 myCompletion 而不是返回值吗?

标签: ios function swift variables optional-parameters


【解决方案1】:

myCompletion的类型没问题,问题出在这里:

myCompletion = myCompletionFunction()

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

将该行更改为:

myCompletion = myCompletionFunction

【讨论】:

  • @JoshGafni 哦,谢谢大家,你是对的,愚蠢的错误
  • @flinth 我不认为这是一个愚蠢的错误。我认为这是一个措辞不当的错误信息。它也是自动“修复”建议的理想选择。
  • 对。知道()Void 相同会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多