
Вышла в свет книга Александра Казанского “Разработка приложений на Swift и SwiftUI с нуля. 2-е издание“.
Рассмотрены принципы протокольно-ориентированного и функционального программирования на языке Swift 5.5 для операционных систем macOS, iOS и iPadOS. Подробно описана среда разработки Xcode 13.1 и SwiftUI. Приведены приемы проектирования и разработки программ для macOS с использованием фреймворка Cocoa, мобильных приложений с помощью фреймворка Cocoa Touch, описаны принципы создания проектов с интерфейсом Storyboard. Главы содержат упражнения с решениями и примеры кода для начинающих программистов. Во втором издании описано создание проектов в редакторе Interface Builder и подробно рассмотрены новые возможности Swift 5.5.
Для программистов
Вы узнаете, как:
- программировать на языке Swift;
- создавать приложения в среде разработки Xcode;
- использовать технологию SwiftUI;
- создавать проекты с помощью Storyboard и Interface Builder;
- разрабатывать приложения для iOS с применением фреймворка Cocoa Touch.
Казанский Александр Анатольевич, кандидат технических наук, доцент. Более 30 лет работает преподавателем, читает лекции по программированию на C#, VB и других языках. Автор 7 книг, посвященных программированию, дискретной математике, а также использованию macOS и приложений Apple.
Введение………………………………………………………………………………………………….. 8
Часть I. Программирование на Swift 5.5………………………………… 13
Глава 1. Среда разработки Xcode 13.1. Первые приложения на Swift 5.5 и SwiftUI 14
1.1. macOS Big Sur, Xcode 13 и Swift 5.5…………………………………………………………………………………… 14
1.2. Консольные приложения Playground для iOS…………………………………………………………………… 18
1.3. Консольные приложения Playground для macOS…………………………………………………………….. 26
1.4. Консольные приложения в режиме project с шаблоном Command Line Tool……………….. 27
1.5. Написание кода на REPL Swift………………………………………………………………………………………….. 32
1.6. Программирование на Swift 5.5 в режиме online………………………………………………………………. 34
1.7. Программирование на языке С++ в среде Xcode……………………………………………………………… 35
1.8. Создание проекта (project) для iOS c интерфейсом SwiftUI…………………………………………….. 39
1.9. Разработка на SwiftUI приложения для банковских операций………………………………………. 44
Глава 2. Основы программирования на языке Swift………………………………. 49
2.1. Переменные и константы……………………………………………………………………………………………………. 49
2.2. Стандартные числовые функции………………………………………………………………………………………. 55
2.3. Арифметические операции и операции сравнения………………………………………………………….. 58
2.4. Построение арифметических выражений и преобразование числовых данных………….. 61
2.5. Упражнения на рассмотренный материал……………………………………………………………………….. 64
2.6. Логические операции………………………………………………………………………………………………………….. 64
2.7. Упражнения на рассмотренный материал……………………………………………………………………….. 65
Упражнение № 1…………………………………………………………………………………………………………… 65
Упражнение № 2…………………………………………………………………………………………………………… 66
Упражнение № 3…………………………………………………………………………………………………………… 66
2.8. Создание собственных пользовательских операций………………………………………………………. 66
2.9. Работа с символьными константами и переменными String и Character………………………. 68
2.10. Опциональные (Optional) типы данных и nil…………………………………………………………………. 71
Глава 3. Функции языка Swift и их возможности…………………………………… 74
3.1. Функции, не имеющие параметров и возвращаемого значения……………………………………… 75
3.2. Функции без параметров и с одним возвращаемым значением……………………………………… 76
3.3. Функции c несколькими входными параметрами и одним возвращаемым значением…. 77
3.4. Локальные параметры функции………………………………………………………………………………………… 78
3.5. Метки и имена параметров функции…………………………………………………………………………………. 79
3.6. Функции c несколькими входными параметрами и несколькими возвращаемыми значениями 81
3.7. Функции с переменным числом параметров (Variadic function)…………………………………….. 82
3.8. Параметры типа in-out (входные-выходные)……………………………………………………………………. 82
3.9. Упражнения на рассмотренный материал……………………………………………………………………….. 83
Упражнение № 1…………………………………………………………………………………………………………… 83
Упражнение № 2…………………………………………………………………………………………………………… 83
Упражнение № 3…………………………………………………………………………………………………………… 84
Упражнение № 4…………………………………………………………………………………………………………… 84
3.10. Способы работы с параметрами in-out, не приводящие к побочным эффектам…………. 84
3.11. Перегрузка функций………………………………………………………………………………………………………….. 86
3.12. Вложенные функции…………………………………………………………………………………………………………. 87
3.13. Функции, возвращающие другие функции……………………………………………………………………… 88
3.14. Замыкания (Closures)………………………………………………………………………………………………………… 90
3.15. Замыкающие выражения (Closure expressions)……………………………………………………………….. 93
3.16. Захват значений замыкания из контекста и запрет их изменений……………………………….. 95
3.17. Использование переменной в качестве функции……………………………………………………………. 96
3.18. Каррирование функций (Currying functions)…………………………………………………………………… 96
3.19. Универсальные функции (Generic functions)…………………………………………………………………… 98
Глава 4. Управление потоком (Control Flow). Перечисления………………… 101
4.1. Условный оператор if……………………………………………………………………………………………………….. 101
4.2. Конструкция условного оператора if…else…………………………………………………………………….. 103
4.3. Упражнения на рассмотренный материал……………………………………………………………………… 105
Упражнение № 1………………………………………………………………………………………………………… 105
Упражнение № 2………………………………………………………………………………………………………… 105
Упражнение № 3………………………………………………………………………………………………………… 105
Упражнение № 4………………………………………………………………………………………………………… 105
Упражнение № 5………………………………………………………………………………………………………… 105
4.4. Условный оператор switch……………………………………………………………………………………………….. 105
4.5. Упражнение на рассмотренный материал……………………………………………………………………… 108
4.6. Циклы…………………………………………………………………………………………………………………………………. 108
4.6.1. Циклы for _ in……………………………………………………………………………………………………. 109
4.6.2. Циклы forEach………………………………………………………………………………………………….. 112
4.6.3. Циклы while………………………………………………………………………………………………………. 114
4.6.4. Циклы repeat…while…………………………………………………………………………………………. 115
4.7. Кортежи (Tuples)……………………………………………………………………………………………………………….. 116
4.8. Перечисления (Enumeration)……………………………………………………………………………………………. 118
4.9. Диапазоны (Range)……………………………………………………………………………………………………………. 122
Глава 5. Коллекции……………………………………………………………………………… 125
5.1. Одномерные массивы……………………………………………………………………………………………………….. 125
5.2. Сортировка одномерных массивов…………………………………………………………………………………. 128
5.3. Двумерные массивы………………………………………………………………………………………………………….. 129
5.4. Словари (Dictionaries)……………………………………………………………………………………………………….. 134
5.5. Множества (Sets)……………………………………………………………………………………………………………….. 138
Глава 6. Классы и структуры……………………………………………………………….. 144
6.1. Синтаксис и семантика классов и структур…………………………………………………………………… 146
6.2. Сохраняемые и ленивые сохраняемые свойства……………………………………………………………. 148
6.3. Вычисляемые свойства…………………………………………………………………………………………………….. 149
6.4. Наблюдатели свойств………………………………………………………………………………………………………. 151
6.5. Инициализаторы……………………………………………………………………………………………………………….. 153
6.6. Методы класса………………………………………………………………………………………………………………….. 156
6.7. Сабскрипты (Subscripts)……………………………………………………………………………………………………. 160
6.8. Наследование (Inheritance)………………………………………………………………………………………………. 164
6.9. Создание класса для решения матричной задачи…………………………………………………………. 173
6.10. Структуры (Structs)…………………………………………………………………………………………………………. 177
6.11. Мутирующие методы структур…………………………………………………………………………………….. 181
6.12. Расширения (Extensions)…………………………………………………………………………………………………. 183
6.13. Контроль доступа…………………………………………………………………………………………………………… 185
6.14. Типы значений и ссылочные типы………………………………………………………………………………… 186
6.15. Автоматический подсчет ссылок (ARC)……………………………………………………………………….. 190
6.16. Сильные, слабые и не учитываемые (Unowned) ссылки……………………………………………… 191
6.17. Метод Copy-On-Write (COW)…………………………………………………………………………………………. 194
Глава 7. Функциональное программирование на Swift………………………… 197
7.1. Простые математические функции………………………………………………………………………………….. 203
7.2. Функции высшего порядка……………………………………………………………………………………………….. 206
7.3. Рекурсии…………………………………………………………………………………………………………………………….. 207
7.4. Упражнения на рассмотренный материал……………………………………………………………………… 215
Упражнение № 1………………………………………………………………………………………………………… 215
Упражнение № 2………………………………………………………………………………………………………… 215
7.5. Функциональные программы, использующие вместо циклов рекурсии……………………… 216
Пример 7.5.1. Поиск простых чисел…………………………………………………………………………. 216
Пример 7.5.2. Разложение положительного целого числа
на простые множители………………………………………………………………………………………………. 217
Пример 7.5.3. Построение таблиц…………………………………………………………………………….. 217
Пример 7.5.4. Преобразование типа массива………………………………………………………….. 218
7.6. Библиотечные функции для работы с одномерными массивами…………………………………. 219
7.6.1. Метод map()………………………………………………………………………………………………………. 220
7.6.2. Метод reduce()………………………………………………………………………………………………….. 220
7.6.3. Метод filter()…………………………………………………………………………………………………….. 221
7.6.4. Метод reversed()……………………………………………………………………………………………….. 222
7.6.5. Метод enumerated()………………………………………………………………………………………….. 222
7.6.6. Метод zip()………………………………………………………………………………………………………… 222
7.6.7. Метод contains()……………………………………………………………………………………………….. 223
7.7. Упражнения на рассмотренный материал……………………………………………………………………… 223
Упражнение № 1………………………………………………………………………………………………………… 223
Упражнение № 2………………………………………………………………………………………………………… 223
Упражнение № 3………………………………………………………………………………………………………… 223
7.8. Функциональные программы для вычисления векторных операций…………………………… 223
7.8.1. Векторные операции……………………………………………………………………………………….. 224
7.8.2. Примеры функциональных программ для работы с векторами………………….. 224
Сумма векторов……………………………………………………………………………………………….. 224
Умножение вектора на скаляр………………………………………………………………………… 225
Скалярное произведение векторов…………………………………………………………………. 226
Длина вектора………………………………………………………………………………………………….. 226
7.9. Упражнения на рассмотренный материал……………………………………………………………………… 226
Упражнение № 1………………………………………………………………………………………………………… 226
Упражнение № 2………………………………………………………………………………………………………… 226
Упражнение № 3………………………………………………………………………………………………………… 227
Упражнение № 4………………………………………………………………………………………………………… 227
7.10. Использование методов функционального программирования при решении задач с массивами 227
7.11. Упражнения на рассмотренный материал…………………………………………………………………… 230
Упражнение № 1………………………………………………………………………………………………………… 230
Упражнение № 2………………………………………………………………………………………………………… 230
Упражнение № 3………………………………………………………………………………………………………… 230
7.12. Использование функционального программирования для работы
со сложными типами данных………………………………………………………………………………………… 231
Глава 8. Протокольно-ориентированное программирование на Swift…… 233
8.1. Протоколы стандартной библиотеки Swift…………………………………………………………………….. 234
8.2. Требования, которые можно задавать в протоколе………………………………………………………. 237
8.3. Объявление свойств в протоколе…………………………………………………………………………………….. 238
8.4. Объявление методов в протоколе……………………………………………………………………………………. 242
8.5. Наследование протоколов……………………………………………………………………………………………….. 243
8.6. Композиция протоколов…………………………………………………………………………………………………… 244
8.7. Делегирование (Delegation)………………………………………………………………………………………………. 245
8.8. Протокол как тип………………………………………………………………………………………………………………. 247
8.9. Расширение протокола…………………………………………………………………………………………………….. 248
8.10. Полиморфизм, основанный на протоколе…………………………………………………………………….. 249
8.11. Использование в протоколах ассоциированных типов………………………………………………. 251
8.12. Разработка приложения с использованием протоколов……………………………………………… 253
Глава 9. Новые методы в версии Swift 5.5. Параллелизм………………………. 263
9.1. Асинхронные функции async/await…………………………………………………………………………………. 265
9.2. Акторы……………………………………………………………………………………………………………………………….. 271
9.3. Изменение протокола Codable………………………………………………………………………………………… 277
9.4. Преобразование типов и ключевое слово lazy……………………………………………………………….. 278
9.5. Асинхронное связывание свойств let (async binding let)………………………………………………… 278
Часть II. Технологии разработки приложений
в среде Xсode 11.2 и 13.1………………………………………………………………… 283
Глава 10. Создание проектов в редакторе Interface Builder
на основе интерфейса Storyboard…………………………………………………………. 284
10.1. Краткая историческая справка……………………………………………………………………………………… 284
10.2. Интерфейс Xcode 13.1…………………………………………………………………………………………………….. 285
10.3. Навигатор проекта Xcode 13.1………………………………………………………………………………………. 290
10.4. Создание проекта для iOS с использованием Interface Builder…………………………………… 291
10.5. Создание проекта для iOS без написания кода……………………………………………………………. 298
10.6. Создание проекта обработки матрицы для iOS…………………………………………………………… 302
10.7. Создание игры для iOS: бросание игральной кости…………………………………………………….. 305
10.8. Создание проекта обработки матрицы для macOS…………………………………………………….. 307
10.9. Создание проекта определения цифр числа для macOS…………………………………………….. 308
10.10. Создание проекта приведения матрицы к верхней треугольной для macOS………….. 310
10.11. Создание проекта для macOS без написания кода……………………………………………………. 314
Глава 11. Технология SwiftUI……………………………………………………………….. 316
11.1. Обновление системы macOS и Xcode……………………………………………………………………………. 317
11.2. Ключевые понятия SwiftUI…………………………………………………………………………………………….. 320
11.3. Начало работы с использованием интерфейса SwiftUI………………………………………………. 322
11.4. Создание представлений строк (Row View). Добавление в проект новых файлов……. 338
11.5. Создание интерактивных приложений SwiftUI……………………………………………………………. 345
11.6. Использование формы, содержащей представления, кнопку и слайдер……………………. 353
11.7. Ввод данных с холста или из симулятора……………………………………………………………………. 354
11.8. Настройка изображений для проекта SwiftUI……………………………………………………………… 357
11.9. Переключение между изображениями с помощью элемента Toggle…………………………. 360
11.10. Использование вертикальных стеков при создании проектов для iOS,
содержащих изображения и текст……………………………………………………………………………….. 362
11.11. Использование в SwiftUI стеков VStack, HStack и ZStack………………………………………….. 365
11.12. Проект с использованием географической карты (MapView), изображения и текста 368
11.13. Использование структуры ForEach для создания представлений…………………………… 375
11.14. Cкроллинг представлений……………………………………………………………………………………………. 378
11.15. Добавление и удаление представлений с помощью модификатора transition(). Библиотека модификаторов 380
11.16. Интерактивный переход между представлениями…………………………………………………….. 383
11.17. Создание пользовательских модальных представлений………………………………………….. 384
11.18. Графические средства SwiftUI…………………………………………………………………………………….. 386
11.19. Создание проекта SwiftUI для реализации анимации………………………………………………. 389
11.20. Использование на SwiftUI декларативных функций…………………………………………………. 393
Приложение. Решения упражнений и ответы……………………………………….. 400
Упражнения 2.5………………………………………………………………………………………………………………………… 400
Упражнения 2.7………………………………………………………………………………………………………………………… 401
Упражнения 3.9………………………………………………………………………………………………………………………… 401
Упражнения 4.3………………………………………………………………………………………………………………………… 403
Упражнение 4.5………………………………………………………………………………………………………………………… 406
Упражнения 7.4………………………………………………………………………………………………………………………… 407
Упражнения 7.7………………………………………………………………………………………………………………………… 409
Упражнения 7.9………………………………………………………………………………………………………………………… 410
Упражнения 7.11……………………………………………………………………………………………………………………… 412
Предметный указатель…………………………………………………………………………. 413