Руководство Swift Closure

1- Что такое Closure?

Closure: Означает "Замыкание", почти похоже на блок команд в  C или  Object-C. Closure это специальный блок команд, может иметь 0 или более параметров, и вид возврата.
Проще, посмотрите на объявление ниже, сможете ли вы угадать его значение? 
Объявление выше может быть разъяснено в иллюстрации ниже: 
Это синтаксис для объявления переменных с видами данных, и прикрепить значения переменным которые вам знакомы: 
MyFirstClosure.swift
import Foundation


// Declare the variable myVar1, with data types, and assign value.

var myVar1 : () -> () =  {
    
    print("Hello from Closure 1");
}

// Declare the variable myVar2, with data types, and assign value.

var myVar2 : () -> (String)  = { () -> (String) in

    return "Hello from Closure 2"

}

// Declare the variable myVar3, with data types, and assign value.

var myVar3 : (Int, Int) -> (Int)  =  { (a : Int, b: Int) -> (Int) in
    
    var c : Int =  a + b
    
    return c
}
    

func test_closure()     {
    
    // Execute Closure.
    myVar1()
    
    // Execute Closure, and get returns value.
    var str2 = myVar2()
    
    print(str2)
    
    // Execute closure, pass parameters
    // and get returns value.
    var c: Int =  myVar3(11, 22)
    
    print(c)
    
}
Closure это блок команд, который может иметь параметры, и может иметь вид возврата:  

Синтаксис Closure:

{  (parameters) -> returntype in
     // statements
}

2- Function по сравнению с Closure

Function это особенный случай в  Closure. Function это  Closure с названием или можно сказать  Closure это анонимный  Function.
 

Определение:

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

3- Объявление анонимного Closure

При объявлении  Closure вам может не понадобится названия параметров, параметры могут ссылаться на $0, $1,...
AnonymousClosure.swift
import Foundation

// Declaring a Closure in the usual way.

var myClosure : (String, String) -> String
    
    = { (firstName: String, lastName: String) -> String in
    
    
    return firstName + " " + lastName
}

// Declare a Closure in the anonymous way.
// (Ignore parameter names).

var anonymousClosure : (String, String) -> String
    
    = {
      // Using
      // $0: For first parameter
      // $1: For second parameter.
        
      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()  {
    
    // Declare a variable type of Closure.
    var mySum : ( Int, Int ) -> (Int)
    
    // Assign a anonymous closure.
    // $0: For first parameter.
    // $1: For second parameter.
    mySum =  {
        return $0 + $1
    }
    
    
    
    var value = mySum(1, 2)
    
    print(value)
    
}

4- Неявные возвращаемые значения

Если в содержании  Closure имеется единственное выражение, вы можете пропустить ключевое слово  return.
ImplicitReturnValues.swift
import Foundation

// This is a Closure that its content is only an expression.

var closureWithReturn  =  { (a: Int, b: Int) -> Int in
    
    // Only an expression.
    return a + b

}

// Can omit the 'return' keyword.

var closureWithoutReturn =  { (a: Int, b: Int) -> Int in
    
    // If only a single expression.
    // Omit 'return' keyword.
    a + b
    
}

5- Closure используется в функции

  • TODO