Руководство Swift Closure
View more Tutorials:
Closure: Означает "Замыкание", почти похоже на блок команд в C или Object-C. Closure это специальный блок команд, может иметь 0 или более параметров, и вид возврата.
Проще, посмотрите на объявление ниже, сможете ли вы угадать его значение?

Объявление выше может быть разъяснено в иллюстрации ниже:

Это синтаксис для объявления переменных с видами данных, и прикрепить значения переменным которые вам знакомы:

MyFirstClosure.swift
import Foundation // Объявить переменную myVar1, с видом данных, и прикрепить к ней значение. var myVar1 : () -> () = { print("Hello from Closure 1"); } // Объявить переменную myVar2, с видом данных, и прикрепить к ней значение. var myVar2 : () -> (String) = { () -> (String) in return "Hello from Closure 2" } // Объявить переменную myVar3, с видом данных, и прикрепить к ней значение. var myVar3 : (Int, Int) -> (Int) = { (a : Int, b: Int) -> (Int) in var c : Int = a + b return c } func test_closure() { // Выполнить Closure. myVar1() // Выполнить Closure, и получить возвратное значение. var str2 = myVar2() print(str2) // Выполнить closure, передать (pass) параметры // и получить возвратное значение. var c: Int = myVar3(11, 22) print(c) }
Closure это блок команд, который может иметь параметры, и может иметь вид возврата:

Синтаксис Closure:
{ (parameters) -> returntype in // statements }
Function это особенный случай в Closure. Function это Closure с названием или можно сказать Closure это анонимный Function.
Определение:

Об использовании:

При объявлении Closure вам может не понадобится названия параметров, параметры могут ссылаться на $0, $1,...
AnonymousClosure.swift
import Foundation // Объявить Closure обычным способом. var myClosure : (String, String) -> String = { (firstName: String, lastName: String) -> String in return firstName + " " + lastName } // Объявить Closure анонимным способом (anonymous). // (Пропустить названия параметров). var anonymousClosure : (String, String) -> String = { // Использовать: // $0: Первый параметр // $1: Второй параметр return $0 + " " + $1 }
Заметка: $0, $1,... это анонимные параметры, они используются только в анонимных Closure, если использовать в обычных Closure вы получите сообщение об ошибке:Anonymous closure arguments cannot be used inside a closure that has explicit arguments
Например с анонимным Closure (2):
AnonymosClosure2.swift
import Foundation func test_anonymousClosure() { // Объявить переменную вида Closure. var mySum : ( Int, Int ) -> (Int) // Прикрепить анонимный closure для нее. // $0: Первый параметр // $1: Второй параметр mySum = { return $0 + $1 } var value = mySum(1, 2) print(value) }
Если в содержании Closure имеется единственное выражение, вы можете пропустить ключевое слово return.
ImplicitReturnValues.swift
import Foundation // Это Closure у которого содержание имеет одно единственное выражение var closureWithReturn = { (a: Int, b: Int) -> Int in // Единственное выражение (expression). return a + b } // Можно пропустить ключевое слово 'return'. var closureWithoutReturn = { (a: Int, b: Int) -> Int in // Если только единственное выражение (expression). // Можно пропустить ключевое слово 'return'. a + b }
- TODO