Замыкания (closure) в Swift

Домашняя работа к главе 16

Замыкания (closure), или замыкающие выражения — это сгруппированный программный код, который может быть передан в виде параметра и многократно использован. Ничего не напоминает? Если вы скажете, что в этом определении узнали функции, то будете полностью правы. Поговорим об этом подробнее.

Задание 1

1)Напишите замыкание, которое производит вывод на консоль сообщения “Hello, World!”.
2)Вызовите данное замыкание
3)Какой тип данных у данного замыкания?

Правильный ответ

//1)
// для того, чтобы замыкание могло быть вызвано, оно должно быть проинициализировано параметру
let closureHello = { print("Hello, World!") }
//2)
closureHello()
//3)
//Тип данных замыкания: () -> ()
type(of:closureHello) // (() -> ()).Type

 

Задание 2

Из представленных ниже функциональных типов укажите те, которые указывают на то:

1) что функция/замыкание не принимает входных аргументов и ничего не возвращает
2) что функция принимает один входной аргумент
3) что функция возвращает значение

() -> (:)
(_) -> ()
(Int) -> () -> ()
() -> Void
() -> (String)
() -> ()
Правильный ответ

1)
4 и 6
2)
3, т.к. функция принимает входной аргумент типа Int, требований к возвращаемому значению в данного подзадании нет)
3)
3, т.к. функция возвращает значение типа () -> ()
5, т.к. функция возвращает значение типа String

 

Задание 3

1) Напишите замыкание, которое принимает на вход параметр типа String и выводит его значение на консоль.
2) Вызовите данное замыкание
3) Какой тип данных у данного замыкания?

Правильный ответ

//1)
let closurePrintMessage = { (message: String) in
    print(message)
}
//2)
closurePrintMessage("Этот текст будет выведен на консоль")

// вариант решения, предложенный Тимуром @magic1620
let printString: (String) -> () = { print($0) }

 

Задание 4

1) Напишите замыкание, которое принимает на вход два целочисленных параметра и возвращает их сумму.
2) Протестируйте работу данного замыкания
3) Какой тип данных будет у данного замыкания?

Правильный ответ

//1)
let closureSumOfTwoInt = { (a: Int, b: Int) in
    return a + b
}
//2)
closureSumOfTwoInt(4,7) //11
//3)
// тип данных - (Int, Int) -> Int
type(of: closureSumOfTwoInt) // ((Int, Int) -> Int).Type

 

Доступ закрыт

Дополнительные 6 заданий доступны только подписчикам

Оформить доступ


5 Comments

  1. Vlados:

    3 задание
    можно еще сократить:
    let printString = { print($0) }

  2. AlexDevLviv:

    Добрый вечер, 4 задание можно решить еще и таким способом:

    var closureSumOfTwoInt: (Int, Int) -> (Int) = { return $0 + $1 }

    closureSumOfTwoInt(1, 2)

  3. AlexDevLviv:

    В 9 задании ошибка!

    Если написать так: print( arrayOfInt.sorted(by: ) )

  4. Alekschatov:

    задание №9 к главе 16, вроде бы ошибка. Нужно отсортировать массив по убыванию (значит от большего к меньшему), в решении указано наоборот.. Задание 9Вам дан массив целочисленных значенийlet arrayOfInt = [2,55,1,2,77,24,1,2]Отсортируйте его элементы по убыванию и выведите на консоль Правильный ответ Так как массив хранится в константе, то возможно использовать метод sorted(by:), но не sort(by:), т.к. первый возвращает отсортированное значение, а второй сортирует значение исходной коллекцииprint( arrayOfInt.sorted(by: <) )  by: >

Добавить комментарий