Swift. Основы разработки приложений под iOS, iPadOS и macOS

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Мечтаете стать iOS-разработчиком, написать собственное приложение и работать в крутой компании? Тогда эта книга для вас! Язык Swift прост, понятен и отлично подойдет как новичкам, так и опытным программистам. Чтобы начать писать код, вам потребуются только эта книга, компьютер и желание учиться. Все базовые концепции программирования и основы синтаксиса объясняются доступным языком, поэтому если вы никогда раньше не занимались разработкой, то эта книга — отличный старт. Теория чередуется с практическими примерами и кодом — так вы сразу сможете связать абстрактные понятия с реальными ситуациями. В каждой главе вас ждут тесты и домашние задания, которые помогут закрепить материал. А еще Swift — это дружелюбное сообщество в Telegram, где можно обсуждать проекты и получать поддержку. Учитесь, создавайте и творите свое будущее!

Author(s): Василий Усов
Series: Библиотека программиста
Edition: 6
Publisher: Питер
Year: 2021

Language: Russian
Commentary: Vector PDF
Pages: 544
City: СПб.
Tags: macOS; Programming; Data Structures; Apple; iOS; Mobile Development; Swift; Design Patterns; Memory Management; Laziness; Object-Oriented Programming; User Interface; Closures; Generic Programming; Inheritance

Читателю
Присоединяйтесь к нам
Введение
Для кого написана книга
Что нужно знать, прежде чем начать читать
Особенности Swift
Современность
Объектно-ориентированность
Читабельность, экономичность и лаконичность кода
Безопасность
Производительность
Актуальность
О том, как работать с книгой
О домашних заданиях
Исправления в шестом издании
Структура книги
Условные обозначения
О важности изучения английского языка
От издательства
Подготовка к разработке Swift-приложений
Какие варианты обучения доступны
Подготовка к разработке на Mac
Компьютер Mac
Зарегистрируйте учетную запись Apple ID
Скачайте и установите среду разработки Xcode
Обзор Хcode
Интерфейс playground-проекта
Возможности playground-проекта
Часть I. Базовые возможности Swift
Глава 1. Отправная точка
1.1. Вычислительное мышление
1.2. Как компьютер работает с данными
Аппаратный уровень
Уровень операционной системы
Программный уровень
1.3. Базовые понятия
1.4. Введение в операторы
Ваш первый программный код
Классификация операторов
1.5. Оператор инициализации
1.6. Переменные и константы
Переменные
Константы
Объявление нескольких параметров в одном выражении
Где использовать переменные и константы
1.7. Инициализация копированием
1.8. Правила именования переменных и констант
1.9. Возможности автодополнения и кодовые сниппеты
1.10. Область видимости (scope)
1.11. Комментарии
Классические комментарии
Markdown-комментарии
1.12. Точка с запятой
1.13. Отладочная консоль и функция print(_:)
Консоль
Вывод текстовой информации
Глава 2. Фундаментальные типы данных
2.1. Предназначение типов данных
2.2. Числовые типы данных
Целочисленные типы данных
Объектные возможности Swift
Числа с плавающей точкой
Арифметические операторы
Приведение числовых типов данных
Составной оператор присваивания
Способы записи числовых значений
Тип данных Decimal и точность операций
2.3. Строковые типы данных
Как компьютер видит строковые данные
Инициализация строковых значений
Тип данных Character
Тип данных String
Пустые строковые литералы
Многострочные строковые литералы
Приведение к строковому типу данных
Объединение строк
Сравнение строк
Юникод в строковых типах данных
2.4. Логический тип данных
Логические операторы
Операторы сравнения
2.5. Псевдонимы типов
2.6. Дополнительные сведения о типах данных
Как узнать тип данных параметра
Хешируемые и сопоставимые типы данных
2.7. Где использовать фундаментальные типы
Часть II. Контейнерные типы данных
Глава 3. Кортежи (Tuple)
3.1. Основные сведения о кортежах
Литерал кортежа
Тип данных кортежа
3.2. Взаимодействие с элементами кортежа
Инициализация значений в параметры
Доступ к элементам кортежа через индексы
Доступ к элементам кортежа через имена
Редактирование кортежа
3.3. Сравнение кортежей
3.4. Где используются кортежи
Глава 4. Последовательности и коллекции
4.1. Классификация понятий
4.2. Последовательности (Sequence)
4.3. Коллекции (Collection)
4.4. Работа с документацией
Глава 5. Диапазоны (Range)
5.1. Оператор полуоткрытого диапазона
Бинарная форма оператора
Префиксная форма оператора
5.2. Оператор закрытого диапазона
Бинарная форма оператора
Постфиксная форма оператора
Префиксная форма оператора
5.3. Базовые свойства и методы
5.4. Классификация диапазонов
5.5. Где использовать диапазоны
Глава 6. Массивы (Array)
6.1. Введение в массивы
Хранение массива в памяти компьютера
Создание массива с помощью литерала
Создание массива с помощью Array(arrayLiteral:)
Создание массива с помощью Array(_:)
Создание массива с помощью Array(repeating:count:)
Доступ к элементам массива
6.2. Тип данных массива
6.3. Массив — это value type
6.4. Пустой массив
6.5. Операции с массивами
Сравнение массивов
Слияние массивов
6.6. Многомерные массивы
6.7. Базовые свойства и методы массивов
6.8. Срезы массивов (ArraySlice)
Операции с ArraySlice
6.9. Где использовать массивы
Глава 7. Множества (Set)
7.1. Введение во множества
Варианты создания множества
7.2. Пустое множество
7.3. Базовые свойства и методы множеств
Операции со множествами
Отношения множеств
7.4. Где использовать множества
Глава 8. Словари (Dictionary)
8.1. Введение в словари
Создание словаря с помощью литерала словаря
Создание словаря с помощью Dictionary(dictionaryLiteral:)
Создание словаря с помощью Dictionary(uniqueKeysWithValues:)
8.2. Тип данных словаря
8.3. Взаимодействие с элементами словаря
8.4. Пустой словарь
8.5. Базовые свойства и методы словарей
8.6. Вложенные типы
8.7. Где использовать словари
Глава 9. Строка — коллекция символов (String)
9.1. Character в составе String
9.2. Графем-кластеры
9.3. Строковые индексы
9.4. Подстроки (Substring)
Часть III. Основные возможности Swift
Глава 10. Операторы управления
10.1. Утверждения
10.2. Оператор условия if
Сокращенный синтаксис оператора if
Стандартный синтаксис оператора if
Расширенный синтаксис оператора if
Тернарный оператор условия
10.3. Оператор ветвления switch
Диапазоны в операторе switch
Кортежи в операторе switch
Ключевое слово where в операторе switch
Связывание значений
Оператор break в конструкции switch-case
Ключевое слово fallthrough
10.4. Операторы повторения while и repeat while
Оператор while
Оператор repeat while
Использование оператора continue
Использование оператора break
10.5. Оператор повторения for
Использование where в конструкции for-in
Многомерные коллекции в конструкции for-in
Использование continue в конструкции for-in
Использование break в конструкции for-in
10.6. Оператор досрочного выхода guard
10.7. Где использовать операторы управления
Глава 11. Опциональные типы данных
11.1. Введение в опционалы
Опционалы в кортежах
11.2. Извлечение опционального значения
Принудительное извлечение значения
Косвенное извлечение значения
11.3. Проверка наличия значения в опционале
11.4. Опциональное связывание
11.5. Опциональное связывание как часть оптимизации кода
11.6. Оператор объединения с nil
11.7. Где использовать опциональные значения
Глава 12. Функции
12.1. Введение в функции
12.2. Входные параметры и возвращаемое значение
Входные параметры
Внешние имена входных параметров
Возвращаемое значение
Изменяемые копии входных параметров
Сквозные параметры
Функция в качестве входного параметра
Входной параметр с переменным числом значений
Кортеж в качестве возвращаемого значения
Значение по умолчанию для входного параметра
12.3. Функциональный тип
Простой функциональный тип
Сложный функциональный тип
12.4. Функция в качестве входного и возвращаемого значений
Возвращаемое значение функционального типа
Входное значение функционального типа
Параметры функционального типа для ленивых вычислений
12.5. Возможности функций
Вложенные функции
Перегрузка функций
Рекурсивный вызов функций
12.6. Где использовать функции
Глава 13. Замыкания (closure)
13.1. Виды замыканий
13.2. Введение в безымянные функции
13.3. Возможности замыканий
Пропуск указания типов
Неявное возвращение значения
Сокращенные имена параметров
Вынос замыкания за скобки
Вынос нескольких замыканий за скобки
13.4. Безымянные функции в параметрах
13.5. Пример использования замыканий при сортировке массива
13.6. Захват переменных
Синтаксис захвата переменных
Захват вложенной функцией
13.7. Замыкания передаются по ссылке
13.8. Автозамыкания
13.9. Выходящие (сбегающие) замыкания
13.10. Где использовать замыкания
Глава 14. Дополнительные возможности
14.1. Метод map(_:)
14.2. Метод mapValues(_:)
14.3. Метод flatMap(_:)
14.4. Метод compactMap(_:)
14.5. Метод filter(_:)
14.6. Метод reduce(_:_:)
14.7. Метод zip(_:_:)
14.8. Оператор guard для опционалов
14.9. Оператор отложенных действий defer
Глава 15. Ленивые вычисления
15.1. Понятие ленивых вычислений
15.2. Замыкания в ленивых вычислениях
15.3. Свойство lazy
Часть IV. Введение в разработку приложений
Глава 16. Консольное приложение «Сумма двух чисел»
16.1. Обзор интерфейса Xcode
Создание Xcode-проекта
Интерфейс и элементы управления Xcode-проектом
16.2. Подготовка к разработке приложения
16.3. Запуск приложения
16.4. Код приложения «Сумма двух чисел»
Глава 17. Консольная игра «Угадай число»
17.1. Код приложения «Угадай число»
17.2. Устраняем ошибки приложения
Часть V. Нетривиальные возможности Swift
Глава 18. Введение в объектно-ориентированное и протокол-ориентированное программирование
18.1. Экземпляры
18.2. Модули
18.3. Пространства имен
18.4. API Design Guidelines
Глава 19. Перечисления
19.1. Синтаксис перечислений
19.2. Ассоциированные параметры
19.3. Вложенные перечисления
19.4. Оператор switch для перечислений
19.5. Связанные значения членов перечисления
Указание связанных значений
Доступ к связанным значениям
19.6. Инициализатор
19.7. Свойства в перечислениях
19.8. Методы в перечислениях
19.9. Оператор self
19.10. Рекурсивные перечисления
19.11. Где использовать перечисления
Глава 20. Структуры
20.1. Синтаксис объявления структур
20.2. Свойства в структурах
Объявление свойств
Встроенный инициализатор
Значения свойств по умолчанию
20.3. Структура как пространство имен
20.4. Собственные инициализаторы
20.5. Методы в структурах
Объявление методов
Изменяющие методы
Глава 21. Классы
21.1. Синтаксис классов
21.2. Свойства классов
21.3. Методы классов
21.4. Инициализаторы классов
21.5. Вложенные в класс типы
Ссылки на вложенные типы
Глава 22. Свойства
22.1. Типы свойств
Хранимые свойства
Ленивые хранимые свойства
Вычисляемые свойства
22.2. Контроль значений свойств
Геттер и сеттер вычисляемого свойства
Наблюдатели хранимых свойств
22.3. Свойства типа
Глава 23. Сабскрипты
23.1. Назначение сабскриптов
23.2. Синтаксис сабскриптов
Глава 24. Наследование
24.1. Синтаксис наследования
Доступ к наследуемым характеристикам
24.2. Переопределение наследуемых элементов
Переопределение методов
Доступ к переопределенным элементам суперкласса
Переопределение инициализаторов
Переопределение наследуемых свойств
24.3. Модификатор final
24.4. Подмена экземпляров классов
24.5. Приведение типов
Проверка типа
Преобразование типа
Глава 25. Контроль доступа
Глава 26. Псевдонимы Any и AnyObject
26.1. Псевдоним Any
Приведение типа Any
26.2. Псевдоним AnyObject
Приведение типа AnyObject
Глава 27. Инициализаторы и деинициализаторы
27.1. Инициализаторы
Назначенные инициализаторы
Вспомогательные инициализаторы
Наследование инициализаторов
Отношения между инициализаторами
Проваливающиеся инициализаторы
Обязательные инициализаторы
27.2. Деинициализаторы
Глава 28. Управление памятью в Swift
28.1. Что такое управление памятью
Статическая память
Автоматическая память
Динамическая память
28.2. Уничтожение экземпляров
Количество ссылок на экземпляр
28.3. Утечки памяти и ARC
Пример утечки памяти
Сильные (strong), слабые (weak) и бесхозные (unowned) ссылки
Automatic Reference Counting (ARC)
28.4. Ссылки в замыканиях
Глава 29. Опциональные цепочки
29.1. Доступ к свойствам через опциональные цепочки
29.2. Установка значений через опциональные цепочки
29.3. Доступ к методам через опциональные цепочки
29.4. Доступ к сабскриптам через опциональные цепочки
Глава 30. Протоколы
30.1. Понятие протокола
30.2. Требуемые свойства
30.3. Требуемые методы
30.4. Требуемые инициализаторы
30.5. Протокол в качестве типа данных
Протокол, указывающий на множество типов
Протокол и операторы as? и as!
Протокол и оператор is
30.6. Наследование протоколов
30.7. Классовые протоколы
30.8. Композиция протоколов
Глава 31. Расширения
31.1. Вычисляемые свойства в расширениях
31.2. Методы в расширениях
31.3. Инициализаторы в расширениях
31.4. Сабскрипты в расширениях
31.5. Расширения протоколов
Подпись объектного типа на протокол
Расширение протоколов и реализации по умолчанию
Глава 32. Протокол-ориентированное программирование
32.1. Важность использования протоколов
Целостность типов данных
Инкапсуляция
Полиморфизм
32.2. Протокол-ориентированное программирование
32.3. Где использовать class и struct
Правила выбора между классом и структурой
Глава 33. Разработка приложения в Xcode Playground
33.1. UIKit и SwiftUI
33.2. Разработка интерактивного приложения
Библиотека PlaygroundSupport
Структура проекта
Класс Ball
Класс SquareArea
Глава 34. Универсальные шаблоны (Generic)
34.1. Зачем нужны дженерики
34.2. Универсальные функции
34.3. Ограничения типа
34.4. Универсальные объектные типы
Расширения универсального типа
34.5. Универсальные протоколы
Использование ассоциированных параметров
Дальнейшая доработка сущности
34.6. Непрозрачные типы (Opaque types) и ключевое слово some
Решение проблемы
Глава 35. Обработка ошибок
35.1. Выбрасывание ошибок
35.2. Обработка ошибок
Передача ошибки
Оператор do-catch
Преобразование ошибки в опционал
Подавление выброса ошибки
35.3. Структуры и классы для обработки ошибок
Глава 36. Нетривиальное использование операторов
36.1. Операторные функции
Префиксные и постфиксные операторы
Составной оператор присваивания
Оператор эквивалентности
36.2. Пользовательские операторы
Часть VI. Введение в мобильную разработку
Глава 37. Разработка приложения с использованием UIKit
37.1. Создание проекта MyName
37.2. Структура проекта
37.3. Разработка простейшего UI
Шаг 1. Размещение кнопки
Шаг 2. Изменение текста кнопки
37.4. Запуск приложения в симуляторе
37.5. View Controller сцены и класс UIViewController
37.6. Доступ UI к коду. Определитель типа @IBAction
37.7. Создание дополнительной сцены
37.8. Отображение всплывающего окна. Класс UIAlertController
37.9. Изменение атрибутов кнопки
37.10. Доступ кода к UI. Определитель типа @IBOutlet
Глава 38. Разработка приложения с использованием SwiftUI
38.1. Создание нового проекта
38.2. Структура проекта на SwiftUI
38.3. Редактирование элементов интерфейса
38.4. Создание приложения
Глава 39. Паттерны проектирования
39.1. Паттерн MVC. Фреймворк Cocoa Touch
39.2. Паттерн Singleton. Класс UIApplication
39.3. Паттерн Delegation. Класс UIApplicationDelegate
Заключение