如何在Swift中的异步块中使用@autoclosure参数?

时间:2015-05-21 22:34:52

标签: swift closures

我想在dispatch_async块中调用@autoclosure参数。

func myFunc(@autoclosure condition: () -> Bool) {
  dispatch_async(dispatch_get_main_queue()) {
    if condition() {
      println("Condition is true")
    }
  }
}

我收到以下错误。

  

关闭使用@noescape参数可能允许它逃脱。

是否可以异步调用@autoclosure参数?

在Xcode 6.4(6E23)中测试。

1 个答案:

答案 0 :(得分:13)

是的,只要您声明@autoclosure(escaping)

  

具有autoclosure属性的声明也暗示noescape,除非传递了可选属性escaping

所以这应该这样做:

func myFunc(@autoclosure(escaping) condition: () -> Bool) {
    dispatch_async(dispatch_get_main_queue()) {
        if condition() {
            println("Condition is true")
        }
    }
}