ios - 将闭包作为函数的可选参数传递

标签 ios swift swift3

我有一个有两个参数的函数,最后一个参数是一个回调闭包:

func myAsycTask(name: String, callback: @escaping ()->Void) {
   myQueue.async{
      self.doTask(name)
      callback()
   }
} 

func doTask(name: String) {...}

我想让第二个回调闭包参数可选。我试图将上面的函数重新定义为:

func myAsycTask(name: String, callback: @escaping ()->Void? = nil) {
       myQueue.async{
          self.doTask(name)
          callback()
       }
} 

我得到一个编译器错误:

Nil default argument value of cannot be converted to type '() ->'

那我怎样才能达到我需要的呢?

最佳答案

您当前的代码意味着 Void 是闭包中的可选返回值(这没有多大意义,因为 Void 已经什么都不是了)。您应该将参数括在方括号中,然后将其设为可选。

func myAsycTask(name: String, callback: (() -> Void)? = nil)

关于ios - 将闭包作为函数的可选参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47153628/

相关文章:

swift - UICollectionView ScrollTo 崩溃

ios - 如何使用 swift 3 正确表达此 'rangeOfCharacter' 语句?

ios - 如何在复杂的SpriteKit仿真中解决不必要的碰撞?

ios - 调整 UIView 框架的大小会导致内容调整大小

iOS:UIView 外的实心边框

json - Swift 没有从 JSON 结果中分配变量

ios - 如何将按钮添加到 TableView 部分的页脚?

swift - 约束 View ImageView 内部内容 Swift

ios - 二元运算符 '<<' 不能应用于两个 'T' 操作数

ios - 导航 Controller 循环