不轉義關閉

在 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)
    }
  }
}