不转义关闭

在 Swift 1 和 2 中,默认情况下,闭包参数是转义的。如果你知道闭包不会转义函数体,则可以使用 @noescape 属性标记参数。

在 Swift 3 中,它是另一种方式:默认情况下,闭包参数是非转义的。如果你打算使它转义该函数,则必须使用 @escaping 属性对其进行标记。

class ClassOne {
  // @noescape is applied here as default
  func methodOne(completion: () -> Void) {
    // 
  }
}

class ClassTwo {
  let obj = ClassOne()
  var greeting = "Hello, World!"

  func methodTwo() {
    obj.methodOne() {
      // self.greeting is required
      print(greeting)
    }
  }
}