Set_4 Flashcards

1
Q

Что такое опционал и какие проблемы он призван решать?

A

Опционал считается мощным инструментом языка Свифт. Если после объявления типа поставить вопросительный знак, это будет указывать на то, что значение либо есть, либо его нет, а String и String? – это два разных типа. Например, в Objective-C отсутствие значения доступно только в ссылочных типах, и используется специальное значение nil.

Swift с его опционалами расширяет концепцию отсутствия значения как для ссылочных, так и для других типов. Данная переменная может содержать или какое-то значение, или nil. Чтобы узнать, что «внутри», достаточно развернуть опционал.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Когда вы должны использовать структуру, а когда – класс?

A

В Swift классы и структуры отличаются рядом особенностей. Выведем обобщенную разницу следующим образом:

Классы поддерживают наследование, структуры – нет.
Классы являются ссылочными типами, структуры – это типы значений.
Нет универсального правила, которое определяет, что лучше. Общая рекомендация – использовать оптимальный для достижения конкретной цели инструмент. Но лучше отдать предпочтение структурам, если не требуется наследование или ссылочная семантика.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Что такое дженерики и какие проблемы они решают?

A

Дженерики используются, чтобы алгоритмы безопасно работали с типами. В Swift дженерики могут юзаться как в функциях, так и в типах данных: например, в классах, структурах, etc.

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

Например, в следующем коде вторая функция является «клоном» первой: она просто принимает строки вместо целых чисел:

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Объясните суть неявно развернутых (извлеченных) опционалов.

A

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

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Чтобы объявить статическое свойство или функцию, используйте модификатор static. На примере структуры:

struct Sun {
static func illuminate() {}
}

Для классов можно использовать либо static, либо модификатор class. Они достигают одной и той же цели, но на самом деле разные. Можете ли вы объяснить, чем они отличаются?

A

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

При применении к классам static становится псевдонимом для class final.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly