betacode

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

View more Tutorials:

Следуйте за нами на нашей фан-странице, чтобы получать уведомления каждый раз, когда появляются новые статьи. Facebook

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

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
}

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

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

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

При объявлении 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) 
}

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

Если в содержании 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 
}

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

  • TODO

View more Tutorials:

Maybe you are interested

Это онлайн курс вне вебсайта o7planning, который мы представляем, он включает бесплатные курсы или курсы со скидкой.