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

Lee*_*eem 4 ios swift swift3

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

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

func doTask(name: String) {...}
Run Code Online (Sandbox Code Playgroud)

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

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

我收到编译器错误:

Nil默认参数值不能转换为' () ->'

我怎样才能实现我所需要的呢?

Tam*_*gel 5

你当前的代码意味着Void在闭包中是一个可选的返回(这没有多大意义,因为Void它已经没有了).您应该将参数括在括号中,然后将其设置为可选.

func myAsycTask(name: String, callback: (() -> Void)? = nil)
Run Code Online (Sandbox Code Playgroud)