Zoeken…


Invoering

Van Swift Documentarion

Van een sluiting wordt gezegd dat deze aan een functie ontsnapt wanneer de sluiting als argument aan de functie wordt doorgegeven, maar wordt genoemd nadat de functie terugkeert. Wanneer u een functie declareert die een sluiting als een van de parameters gebruikt, kunt u @escaping vóór het type parameter schrijven om aan te geven dat de sluiting mag ontsnappen.

Niet-ontsnappende sluiting

In Swift 1 en 2 ontsnapten standaard de sluitingsparameters. Als u wist dat uw sluiting niet zou ontsnappen aan de hoofdtekst, kunt u de parameter markeren met het kenmerk @noescape.

In Swift 3 is het andersom: sluitingsparameters zijn standaard niet-escaping. Als u de functie wilt laten ontsnappen, moet u deze markeren met het kenmerk @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)
    }
  }
}

Ontsnappende sluiting

Van Swift Documentarion

@escaping

Pas dit kenmerk toe op het type van een parameter in een methode of functieverklaring om aan te geven dat de parameterwaarde kan worden opgeslagen voor latere uitvoering. Dit betekent dat de waarde de levensduur van het gesprek kan overleven. Parameters van het functietype met het kenmerk escaping type vereisen expliciet gebruik van self. voor eigenschappen of methoden.

class ClassThree {

    var closure: (() -> ())?

    func doSomething(completion: @escaping () -> ()) {
        closure = finishBlock
    }
}

In het bovenstaande voorbeeld wordt het voltooiingsblok opgeslagen en sluit het letterlijk verder dan de functieaanroep. Dus complier zal dwingen om voltooiingsblok te markeren als @escaping.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow