Swift — чек-лист
Чек-лист самопроверки
- Что такое Swift и для каких платформ он предназначен?
- Кто разработал Swift и когда он был представлен?
- Как Swift связан с Objective-C и Cocoa?
- Поддерживает ли Swift кросскомпиляцию под Linux или Windows?
- Какие есть примитивные типы данных (
Int,Double,Bool,Character,String)? - В чём разница между
letиvar? - Как работает вывод типа в Swift?
- Что такое опционалы (
Optional) и зачем они нужны? - Как безопасно работать с опционалами (опциональная привязка,
guard let,if let)? - Что делает оператор принудительного развёртывания (
!) и когда его стоит избегать? - Что такое неявно развёрнутые опционалы (
Implicitly Unwrapped Optional)? - Как объявляются и вызываются функции?
- Что такое параметры с метками и без?
- Как работают значения по умолчанию и вариадические параметры?
- Что такое кортежи (
(Int, String)) и где они применяются? - Как работают замыкания и чем они отличаются от функций?
- Что такое трейлинговые замыкания?
- Как работают захваты значений в замыканиях (
capture list)? - Что такое структуры (
struct) и чем они отличаются от классов? - Что такое классы (
class) и какие особенности у них есть (наследование, deinit)? - Поддерживает ли Swift множественное наследование?
- Что такое инициализаторы (
init) и какие виды бывают? - Что такое фейловые инициализаторы (
init?)? - Как работает деинициализатор (
deinit)? - Что такое ARC и как он управляет памятью?
- Что такое сильные и слабые ссылки (
weak,unowned)? - Как избежать retain cycle в замыканиях и делегатах?
- Что такое перечисления (
enum) и чем они мощнее аналогов в других языках? - Как использовать ассоциированные значения в
enum? - Что такое сопоставление с образцом (
switch) и почему оно должно быть исчерпывающим? - Что такое протоколы (
protocol) и как они реализуются? - Может ли протокол содержать реализацию? (через extension)
- Что такое расширения (
extension) и для чего они используются? - Как добавить метод к существующему типу через расширение?
- Что такое обобщения (
generics) и как они записываются? - Как ограничить обобщённые типы с помощью протоколов?
- Что такое
where-клаузулы в обобщениях? - Как обрабатываются ошибки в Swift (
throw,try,catch,do)? - Что такое протокол
Errorи как создавать собственные ошибки? - Что такое свойства — вычисляемые, наблюдаемые (
willSet,didSet)? - Что такое ленивые свойства (
lazy)? - Как работают методы типа (
static,class)? - Что такое вложенные типы?
- Как организована система модулей в Swift?
- Что такое Swift Package Manager и как им пользоваться?
- Как писать unit-тесты (XCTest)?
- Что такое
@propertyWrapperи как он используется? - Что такое
Codableи как сериализовать объекты в JSON? - Как работает многопоточность в Swift (GCD,
async/awaitначиная с Swift 5.5)? - Какие инструменты отладки и анализа доступны в Xcode (Instruments, Memory Graph Debugger)?