Опубликовано

Вышло второе издание книги “Разработка приложений на Swift и SwiftUI с нуля.”

Разработка приложений на Swift и SwiftUI с нуля. 2-е издание

Вышла в свет книга Александра Казанского “Разработка приложений на 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

 

 

Добавить комментарий