2016-06-29 8 views
1

Im lesen Strong reference cycle for closure von Apple docs. Nachfolgend finden Sie eine Erklärung eines faulen var Schließung:kurze Form des Verschlusses in schnelle, lazy loading

lazy var asHTML:() -> String = { 
     if let text = self.text { 
      return "<\(self.name)>\(text)</\(self.name)>" 
     } else { 
      return "<\(self.name) />" 
     } 
    } 

Unten finden Sie eine Syntax der Schließung in Swift ist

{(parameters) -> return type in 
    statements 
} 

Sie nicht gleich aussehen, aber ich weiß, dass das erste asHTML eine kurze ist Form

Schließung

Kann mir jemand zu Fuß durch, wie ich ein kurzes Formular Form Original Syntax

Antwort

3

Die Erklärung ableiten liest

() -> String 

Das bedeutet, dass die Schließung keine Argumente annimmt und beim Aufruf einen String erzeugt. Diese Schließung erfasst stark die Variable self, um Text verwenden zu können.

Wenn wir die Schließung Definition

{(parameters) -> return type in 
    statements 
} 

Die obige asHTML kann als

{() -> String in 
    statements 
} 

Oder

{ (Void) -> String in 
    statements 
} 

, die die gleiche ist wie

neu geschrieben werden
lazy var asHTML = asHTML() 

func asHTML() -> String { 
    .... 
} 

Als zusätzliche Anmerkung, können Sie auch die faulen asHTML Erklärung umschreiben als

lazy var asHTML: String = { 
     if let text = self.text { 
      return "<\(self.name)>\(text)</\(self.name)>" 
     } else { 
      return "<\(self.name) />" 
     } 
    }() 
3

Swift ermöglicht es Ihnen, Teile des Verschlusses Syntax weglassen je nach Kontext für das Lesen zu erleichtern.

In Ihrem Fall ordnen Sie der asHTML-Variablen eine autoclosure zu.

Von Apples Dokumentation über autoclosures

Einen autoclosure ist ein Verschluss, der automatisch erstellt wird, um einen Ausdruck zu wickeln, das als Argument an eine Funktion übergeben werden wird. Es nimmt keine Argumente, und wenn es aufgerufen wird, gibt es den Wert des Ausdrucks zurück, der darin verpackt ist. Diese syntaktische Bequemlichkeit können Sie geschweifte Klammern um eine Funktion Parameter durch schreiben einen normalen Ausdruck anstelle einer expliziten Schließung.

Sie können mehr über autoclosures und closures Syntax here lesen.