Verschlüsse nicht verstehen Beispiel in Swift

8

Ich versuche, über schnelle und Schließungen zu lernen. Ich stecke an diesem Beispiel fest.

%Vor%

Was ist (Nummer: Int) - & gt; Int? Ist es eine Funktion? Wo ist es definiert? Ссылка

Was macht das Keyword "in"? Die Dokumente sagen, dass man "die Argumente trennen und den Typ vom Körper zurückgeben soll". Ich bin mir nicht sicher, ob ich das verstehe. Warum wird "in" nicht verwendet, um "let result = 3 * number" von "return result" zu trennen.

    
user678392 13.01.2015, 21:23
quelle

3 Antworten

28

Ein Closing ist nur eine Funktion, bei der die Parameter innerhalb der Klammern verschoben werden, mit dem Schlüsselwort in , um die Parameter vom Funktionskörper zu trennen. Die zwei folgenden Beispiele definieren äquivalente Funktionen:

%Vor%

Sie können sie beide auf genau dieselbe Weise aufrufen:

%Vor%

Beachten Sie, dass das zweite Beispiel identisch mit dem ersten Beispiel ist. Nur im ersten Beispiel befinden sich die Parameter (number: Int) -> Int außerhalb der Klammern und im zweiten Beispiel befinden sich die Parameter innerhalb der Klammern, gefolgt vom Schlüsselwort in .

map verwendet ein Array ( numbers , in Ihrem Beispiel) und erstellt ein neues Array, das das Ergebnis der Anwendung der Closure-Funktion auf jedes Element in numbers ist. Wenn numbers also [1, 2, 3] ist, beginnt das obige Beispiel mit 1 . Es wird die Closure-Funktion angewendet, die ein 3 erzeugt (weil es nur das Element aus dem ersten Array mit 3 multipliziert). Dies geschieht für jedes Element in numbers , bis ein neues Array, [3, 6, 9] , erstellt wurde.

Wenn Sie möchten, können Sie map unter Verwendung der Namen der obigen Funktion oder der obigen Schließung aufrufen oder indem Sie sie explizit innerhalb von map ausschreiben. Alle folgenden Beispiele sind völlig äquivalent:

%Vor%

Beachten Sie, dass Beispiel 3 das gleiche wie Beispiel 2 ist, nur in Beispiel 3 wird der Abschluss explizit innerhalb von map angegeben, während in Beispiel 2 der Abschluss einer Konstanten namens myClosure und der Konstante zugewiesen wurde wurde an map geliefert.

Hoffe, das hilft - Schließungen machen Spaß, sind aber verwirrend.

    
Aaron Rasmussen 13.01.2015, 22:11
quelle
1

Die Funktion, die Sie aufrufen, verwendet als Parameter einen Abschluss:

%Vor%

Es wird erwartet, dass die Schließung der Funktion einen Parameter erhält, wenn sie von der aufgerufenen Funktion ausgeführt wird. Dieser Parameter ist in Ihrem Abschluss definiert:

%Vor%

Sie können jetzt den Parameter in den Inhalt der Schließung verwenden

%Vor%     
Ian MacDonald 13.01.2015 21:28
quelle
0

Closures sind in sich abgeschlossene Funktionsblöcke, die weitergegeben und in Ihrem Code verwendet werden können.

Syntax:

%Vor%

Praktisches Szenario: Wenn ein Benutzer einen Filter anwenden möchte und Werte auswählen möchte, die mehr als 300 sind (in diesem Fall), können wir Closures verwenden, um dies zu erreichen.

%Vor%

Von unterhalb Code können Sie deutlich sehen, dass wir die Funktion elements.map () schließen.

Schließung:

%Vor%

(num:Int) ist ein Parameter. Int? Wir geben den optionalen Integer-Typ zurück.

Nach in können wir Ihre Logik schreiben.

Sie können mehr über die Schließung hier lesen.

>     
Ashok R 03.09.2016 05:00
quelle

Tags und Links