В этой статье мы рассмотрим некоторые распространенные вопросы, которые задают во многих интервью.
В. Что такое ключевое слово defer в Swift?
defer — это оператор, который используется для выполнения кода непосредственно перед передачей управления программой за пределы области, в которой появляется оператор.
В приведенном выше примере вывод будет таким:
Изображение будет удалено…
Фамилия удалена…
- Если в одной и той же области действия появляется несколько операторов отсрочки, порядок их появления является обратным порядку их выполнения.
Вывод будет таким:
- defer не фиксирует ссылку или текущее значение переменной.
На выходе будет «Лютер Кинг» 2 раза.
- Мы не можем прервать выполнение отложенного выполнения или использовать return, continue или break внутри блока отложенного выполнения.
. . .
В. Что такое CustomStringConvertible?
Это протокол, позволяющий типу предоставлять собственные текстовые описания. Каждое значение в Swift является конвертируемым.
Типы, соответствующие протоколу CustomStringConvertible, могут предоставлять собственное представление для использования при преобразовании экземпляра в строку. Инициализатор String(описание:) является предпочтительным способом преобразования экземпляра любого типа в строку. Если переданный экземпляр соответствует CustomStringConvertible, инициализатор String(describing:) и функция print(_:) используют свойство пользовательского описания экземпляра.
Прямой доступ к свойству описания типа или использование CustomStringConvertible в качестве универсального ограничения не рекомендуется.
Давайте посмотрим на примере, как использовать этот протокол:
Вывод будет:
Человек(имя: «Алекс Джон», адрес: «Калифорния», возраст: 25)
Вывод будет:
Алексу Джону 25 лет, он живет в Калифорнии.
Предпочитаете способ печати пользовательского описания экземпляра, например:
print(String(описание: Алекс))
Примечание. Необходимо согласовать протокол «CustomStringConvertible» для работы с пользовательским выводом «description».
. . .
В. В чем разница между массивом и набором?
- Массив — это набор упорядоченных значений, а Set — набор уникальных значений.
- Массив полезен, когда для вас важен порядок, а Set полезен, когда вам нужно убедиться, что значение появляется в Set один раз.
Пример:
Как видно из приведенного выше примера, мы инициализировали массив и набор строковых значений.
В выводе мы можем заметить, что порядок Set не такой, как мы инициализировали. Набор является неупорядоченной коллекцией, поэтому он может давать вам другой порядок результата всякий раз, когда вы к нему обращаетесь.
Кроме того, мы инициализировали Set с некоторыми повторяющимися элементами, такими как «Джон». Итак, на выходе мы получаем уникальные значения. Даже если вы напечатаете счетчик коллекции Set с повторяющимися значениями, он вернет счетчик как количество уникальных элементов.
Примечание. Вы не можете получить доступ к элементу в наборе с помощью оператора «индекс». как имена с набором [0]. Вы должны перебирать элементы, чтобы получить доступ к определенному элементу.
В приведенном выше примере мы пытаемся добавить больше элементов в массив и установить. В массиве мы можем использовать функции insert() и append() для добавления элементов. Но в Set мы можем использовать только функцию insert().
Примечание. Значения, хранящиеся в наборе, должны соответствовать протоколу Hashable, чтобы гарантировать, что каждое значение появится в наборе один раз.
Когда вы вставляете элемент в набор, он возвращает кортеж (inserted, memberAfterInsert). Мы можем убедиться, что элемент был вставлен или нет, используя флаг «вставлен».
Чтобы удалить элемент из набора, мы можем просто вызвать функцию remove(member:) и вернуть значение, которое было удалено. Возвращает nil, если значение не существует в наборе.
Сила сетов:
Мы также можем выполнять некоторые другие функции над наборами, которые недоступны в массиве, некоторые полезные функции:
- union(): для объединения двух наборов без повторяющихся значений.
- пересечение (): чтобы получить общие элементы в двух наборах.
. . .
Дополнительные вопросы будут добавлены в ближайшее время в этой статье.
Напишите свой вопрос в поле для комментариев, на который вы хотите получить ответ.