Od jakiegoś już czasu dostępny jest nowy język programowania Swift, za który odpowiedzialna jest dobrze nam znana firma Apple. Wprowadzono do niego wiele nowych rozwiązań, w tym tajemniczo brzmiące „closures”,  w naszym języku nazywane „domknięciami”.

Domknięcia w języku Swift bardzo podobne są do bloków /blocks/, które używaliśmy w takich językach jak C, Objective C lub też „Lambdas” np: w Ruby. Jednym słowem domknięcia, to mały kawałek kodu, który możemy wielokrotnie wywoływać.

Jedną z ich zalet jest uwolnienie programisty od zarządzania pamięcią w przeciwieństwie, do tego, jak to się ma w języku C.

Szczególnym przypadkiem domknięcia jest popularna… funkcja, która posiada swoją nazwę, co nie jest w każdym przypadku wymagane.

Domknięcie tworzymy pomiędzy nawiasami {} i definiuje typ funkcji () -> (), gdzie -> oddziela argumenty i zwracany typy, a słowo kluczowe in oddziela jej nagłówek od ciała.

{ (params) -> returnType in
	statements
}

A jeśli nie zwraca typu:

{ (params) in
	statements
}

prosty przykład:

var increment: (Int) -> (Int) = { a in
	return a + 1
}
 increment(2) // 3 

Możemy przesłać takie domknięcie do innej zmiennej:

 var otherIncrement = increment 
 otherIncrement(5) // 6 

Można także odnosić się do parametrów skrótami $0, $1 itd., pomijając początkowe deklaracje:

var double: (Int) -> (Int) = {
	return $0 * 2
}
var sum: (Int, Int) -> (Int) = {
	return $0 + $1
}

Bardzo często przekazujemy domknięcia jako parametr dla funkcji sort, map, czy filter,

let numbers = [3, 6, 7, 90, 23]
numbers.sort({ return $0 < $1 })

Jak widzimy z powyższych prostych przykładów koncepcja domknięć w Swifcie pozwoli po oswojeniu się z nią pisać nam elastyczny i dynamiczny kod, łatwy do czytania, a widząc tajemnicze znaczki {() in } wiemy, że nie kryje się za tym żadna czarna magia.