Sök…


Introduktion

Från Swift Documentarion

En stängning sägs undkomma en funktion när stängningen överförs som ett argument till funktionen, men kallas efter att funktionen återgår. När du förklarar en funktion som tar en stängning som en av dess parametrar kan du skriva @escaping innan parametertypen för att indikera att stängningen får fly.

Icke-undkommande stängning

I Swift 1 och 2 flydde stängningsparametrarna som standard. Om du visste att din stängning inte skulle undgå funktionskroppen kan du markera parametern med attributet @noescape.

I Swift 3 är det tvärtom: stängningsparametrar undviker som standard. Om du tänker att den ska undgå funktionen måste du markera den med attributet @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)
    }
  }
}

Rymmer stängning

Från Swift Documentarion

@escaping

Tillämpa detta attribut på en parametertyp i en metod eller funktionsdeklaration för att indikera att parameterns värde kan lagras för senare exekvering. Detta innebär att värdet tillåts överleva samtalets livstid. Parametrar för funktionstyp med attributet för undkommande typ kräver uttrycklig användning av jaget. för egenskaper eller metoder.

class ClassThree {

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

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

I exemplet ovan sparas kompletteringsblocket för att stängas och kommer bokstavligen att leva bortom funktionssamtalet. Så kompliseraren kommer att tvinga att markera slutföringsblocket som @escaping.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow