Интервью — 10 вопросов про Swift. Часть 3

Автор оригинала: Animesh Mishra
  • Перевод

Профессиональная программа «iOS Разработчик» — 5 месяцев Best Practice по разработке мобильных приложений с помощью Swift 5. Лучших выпускников ждут на собеседованиях 12 компаний-партнёров OTUS, поэтому публикуем перевод заключительной статьи из серии «iOS Interview Questions (Swift)», где рассмотрим ещё десяток вопросов, ответы на которые помогут вам при трудоустройстве.


image


1. Что такое замыкания и где их можно использовать?


  • Замыкания представляют собой самодостаточные фрагменты кода, которые могут быть переданы функции в качестве аргумента или использованы в программе.
  • Замыкания в Swift похожи на блоки в C и Objective-C и на лямбды в других языках программирования.
  • Это почти то же самое, что и функции, но замыкания не обязательно должны быть именованными.
  • Нет необходимости объявлять тип каждого параметра, но если вы это делаете, то вам не нужно указывать тип возвращаемого значения.

Перейдите по ссылке, чтобы увидеть все варианты синтаксиса замыканий.


2. Что такое убегающие и неубегающие замыкания (escaping/nonescaping closures)?


@nonescaping (стандартные) замыкания:


  • Когда замыкание передается в аргументах функции и используется до того, как выполнится тело функции и управление вернется обратно.
  • Когда функция завершается, переданное замыкание выходит из области видимости и больше не существует в памяти.

@escaping (убегающие) замыкания:


  • Когда замыкание передается в аргументах функции и используется после того, как выполнится тело функции и управление вернется обратно.
  • Когда функция завершается, переданное замыкание продолжает существовать в области видимости и находится в памяти, пока замыкание не будет выполнено. ссылка

3. Укажите, какие типы коллекций доступны в Swift?


image


  • Массивы (Array) — используются для хранения нескольких значений одного и того же типа в упорядоченном виде.
  • Множество (Set) — используются для хранения разных значений одного и того же типа в неупорядоченном виде.
  • Словари (Dictionary ) — используются для хранения пар ключ-значение в неупорядоченном виде.

4. Как определяется базовый класс в Swift?


В Swift классы, которые не наследуются от базового класса, и классы, которые вы определяете без указания суперкласса, автоматически становятся базовыми классами.


5. Что такое деинициализаторы и как они пишутся в Swift?


Деинициализатор объявляется непосредственно перед освобождением памяти, занимаемой экземпляром класса. Деинициализатор пишется с ключевым словом deinit. Он используется, если нужно выполнить какие-либо действия или чистку перед освобождением памяти, занимаемой объектом.


Например, если вы создаете пользовательский класс, чтобы открыть файл и записать в него некоторые данные, вам нужно будет закрыть файл до освобождения памяти, занимаемой экземпляром класса.


Деинициализатор записывается без скобок и не принимает никаких параметров.


deinit {
// выполняем деинициализацию
}

6. Когда используются двойные вопросительные знаки «??»?


Этот оператор называется оператором nil-объединения. Он используется для того, чтобы задать значение по умолчанию, если опционал равен nil.


let a: String? = nil
let b = "nil coalescing operator"
let result = a ?? b
print(result) //вывод:"nil coalescing operator"

  • a ?? b распаковывает опционал a, если он содержит значение, или возвращает значение по умолчанию b, если a равно nil.
  • Выражение a всегда имеет опциональный тип. Выражение b должно соответствовать типу, который хранится внутри a.

6. В чем разница между ‘?’ И ‘!’?


Символ "?"


  1. При работе с опционалами вы можете поставить «?» перед такими наборами команд, как методы, свойства и сабскрипты.
  2. Если значение до «?» равно nil, то все, что идет после «?» игнорируется, а значение всего выражения становится равным nil.
  3. В противном случае, опционал распаковывается, и все, что идет после «?» действует на распакованное значение.
  4. В обоих случаях значение всего выражения является опционалом.

Символ "!"


  1. Убедившись, что опционал содержит значение, вы можете получить доступ к его базовому значению, добавив восклицательный знак (!) в конце имени опционала.
  2. Восклицательный знак фактически говорит: «Я знаю, что этот опционал действительно имеет значение; пожалуйста, используй его. ”
  3. Используйте его только в том случае, если вы абсолютно уверены, что неявно распакованный опционал имеет значение при первом обращении к нему.

7. Что такое псевдоним типа в Swift?


Объявление псевдонима типа вводит именованный псевдоним существующего типа в программу. Объявления псевдонимов типов объявляются с помощью ключевого слова typealias.


typealias name = existing type


typealias StudentName = String
let name:StudentName = "Jack"

Вы можете использовать typealias для большинства типов в Swift, например:


  • Встроенные типы (например, String, Int)
  • Пользовательские типы (например, классы, структуры, перечисления)
  • Сложные типы (например, замыкания)

8. В чем разница между функциями и методами в Swift?


Метод — это функция, связанная с классом, структурой или перечислением. Это относится как к методам экземпляров, так и к методам типов.


Функция — объявлена в глобальной области видимости и не относится ни к какому типу.


Функции могут быть определены вне классов или внутри классов/структур/перечислений, в то время как методы должны быть определены внутри и быть частью классов/структур/перечислений.


9. Какой синтаксис у внешних параметров?


Внешний параметр позволяет нам давать имена параметрам функции, чтобы сделать их назначение более понятным.


func power(base a: Int, exponent b: Int) -> Int


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


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


10. Можно ли переопределять структуры и перечисления в Swift?


Нельзя создать подкласс структуры или перечисления, как и переопределить их. Потому что структура является типом значения, и компилятор должен знать ее точный размер во время компиляции, что переопределение делает невозможным.


Чтобы найти предыдущие части, переходите по ссылкам Часть 1, Часть 2, Все о замыканиях, Все о свойствах


Вот и всё! Уверены, переводы пригодятся не только студентам курса «iOS Разработчик», а также многим пользователям Хабра. Желаем всем профессиональных успехов и ждём в ближайших группах наших авторских онлайн-программ!

OTUS. Онлайн-образование
341,88
Цифровые навыки от ведущих экспертов
Поделиться публикацией

Похожие публикации

Комментарии 1

    0
    Выглядит как шпаргалка студента-двоечника.

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое