swift основы разработки приложений под ios 6 издание

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

По сравнению с предыдущим изданием эта книга содержит следующие изменения и дополнения:

Формат книги изменен (теперь она больше и толще).
Учебный материал актуализирован в соответствии со Swift 5.3 и Xcode 12.
Переписаны и обновлены большинство глав в книге.
Добавлен новый материал, который ранее не входил в книгу:

Обновлены графические материалы (схемы, рисунки, графики и скриншоты).

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

Вы уже начали путешествие в мир Swift. Совсем скоро вы выполните первые обязательные шаги перед разработкой собственных приложений. Вы узнаете, как завести собственную учетную запись Apple ID, как подключиться к программе Apple-разработчиков, где взять среду разработки Swift-приложений и как с ней работать.

Весь последующий материал книги разделен на шесть частей:

Часть I. Базовые возможности Swift. После знакомства со средой разработки Xcode вы изучите базовые возможности Swift. Вы узнаете, какой синтаксис имеет Swift, что такое переменные и константы, какие типы данных существуют и как всем этим пользоваться при разработке программ.

Часть II. Контейнерные типы данных. Что такое последовательности и коллекции и насколько они важны для создания ваших программ? В этой части книги вы познакомитесь с наиболее важными элементами языка программирования.

Часть III. Основные возможности Swift. Третья часть фокусируется на рассмотрении и изучении наиболее простых, но очень интересных средств Swift, позволяющих управлять ходом выполнения приложений.

Часть IV. Введение в разработку приложений. Эта часть посвящена изучению основ среды разработки Xcode, а также созданию двух первых консольных приложений.

Часть V. Нетривиальные возможности Swift. В пятой части подробно описываются приемы работы с наиболее мощными и функциональными средствами Swift. Материал этой части вы будете использовать с завидной регулярностью при создании собственных приложений в будущем. Также здесь вас ждет большая практическая работа — создание первого интерактивного приложения в Xcode Playground.

Часть VI. Введение в iOS-разработку. В конце долгого и увлекательного пути изучения языка и создания простых приложений вам предстоит окунуться в мир разработки полноценных программ. Из этой части вы узнаете основы создания интерфейсов и работы программ в Xcode «под капотом». Все это в будущем позволит вам с успехом осваивать новый материал и создавать прекрасные проекты.

Инициализаторы и деинициализаторы

Инициализатор (конструктор) — это специальный метод, выполняющий подготовительные действия при создании экземпляра объектного типа данных. Инициализатор срабатывает при создании экземпляра, а при его удалении вызывается деинициализатор.

27.1. Инициализаторы

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

При реализации собственных типов данных во многих случаях не требуется создавать собственный инициализатор, так как классы и структуры имеют встроенные инициализаторы:

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

Инициализаторы класса и структуры, производящие установку значений свойств, называются назначенными (designated). Вы можете разработать произвольное количество назначенных инициализаторов с отличающимся набором параметров в пределах одного объектного типа. При этом должен существовать хотя бы один назначенный инициализатор, производящий установку значений всех свойств (если они существуют), и один из назначенных инициализаторов должен обязательно вызываться при создании экземпляра. Назначенный инициализатор не может вызывать другой назначенный инициализатор, то есть использование конструкции self.init() запрещено.

Инициализаторы наследуются от суперкласса к подклассу.

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

Инициализатор может устанавливать значения констант.

Внутри инициализатора необходимо установить значения свойств класса или структуры, чтобы к концу его работы все свойства имели значения (опционалы могут соответствовать nil).

Вспомогательные инициализаторы

Помимо назначенных, в Swift существуют вспомогательные (convenience) инициализаторы. Они являются вторичными и поддерживающими. Вы можете определить вспомогательный инициализатор для проведения настроек и обязательного вызова одного из назначенных инициализаторов. Вспомогательные инициализаторы не являются обязательными для их реализации в типе. Создавайте их, если это обеспечивает наиболее рациональный путь решения поставленной задачи.

Синтаксис объявления вспомогательных инициализаторов не слишком отличается от синтаксиса назначенных.

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

В теле инициализатора обязательно должен находиться вызов одного из назначенных инициализаторов.

Вернемся к иерархии определенных ранее классов Quadruped, Dog и NoisyDog. Давайте перепишем класс Dog таким образом, чтобы при установке он давал возможность выводить на консоль произвольный текст. Для этого создадим вспомогательный инициализатор, принимающий на входе значение для наследуемого свойства type (листинг 27.1).

В результате при создании нового экземпляра класса Dog вам будет предложено выбрать один из двух инициализаторов: init() или init(text:). Вспомогательный инициализатор вызывает назначенный и выводит текст на консоль.

Вспомогательный инициализатор может вызывать назначенный через другой вспомогательный инициализатор.

Наследование инициализаторов

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

Отношения между инициализаторами

В вопросах отношений между инициализаторами Swift соблюдает следующие правила:

image loader

Здесь изображен суперкласс с одним назначенным и двумя вспомогательными инициализаторами. Один из вспомогательных инициализаторов вызывает другой, который, в свою очередь, вызывает назначенный. Также изображен подкласс, имеющий два собственных назначенных инициализатора и один вспомогательный.

Вызов любого инициализатора из изображенных должен в итоге вызывать назначенный инициализатор суперкласса (левый верхний блок).

Проваливающиеся инициализаторы

В некоторых ситуациях бывает необходимо определить объектный тип, создание экземпляра которого может закончиться неудачей, вызванной некорректным набором внешних параметров, отсутствием какого-либо внешнего ресурса или иным обстоятельством. Для этой цели служат проваливающиеся (failable) инициализаторы. Они способны возвращать nil при попытке создания экземпляра. И это их основное предназначение.

Для создания проваливающегося инициализатора служит ключевое слово init? (со знаком вопроса), который говорит о том, что возвращаемый экземпляр будет опционалом или его не будет вовсе.

В теле инициализатора должно присутствовать выражение return nil.

Рассмотрим пример реализации проваливающегося инициализатора. Создадим класс, описывающий сущность «прямоугольник». При создании экземпляра данного класса необходимо контролировать значения передаваемых параметров (высота и ширина), чтобы они обязательно были больше нуля. При этом в случае некорректных значений параметров программа не должна завершаться с ошибкой.

Для решения данной задачи используем проваливающийся инициализатор (листинг 27.2).

Инициализатор принимает и проверяет значения двух параметров. Если хотя бы одно из них меньше или равно нулю, то возвращается nil. Обратите внимание на то, что, прежде чем вернуть nil, инициализатор устанавливает значения всех хранимых свойств.

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

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

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

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

При создании экземпляра перечисления в качестве входного параметра symbol передается значение. На основе переданного значения возвращается соответствующий член перечисления.

У перечислений, члены которых имеют значения, есть встроенный проваливающийся инициализатор init?(rawValue:). Его можно использовать без определения в коде (листинг 27.4).

Члены перечисления TemperatureUnit имеют значения типа Character. В этом случае вы можете вызвать встроенный проваливающийся инициализатор, который вернет член перечисления, соответствующий переданному значению.

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

Для Хаброжителей скидка 25% по купону — Swift

По факту оплаты бумажной версии книги на e-mail высылается электронная книга.

Источник

Swift основы разработки приложений под ios 6 издание

LKt699JAPpdHu92AhRr3ujdZVHkcmz9tRshYG931kZlh

LKt699JAPpdHu92AhRr3ujdZVHkcmz9tRshYG931kZlh

ITc | сообщество программистов запись закреплена

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

Автор: Василий Усов
Год: 2016

Данная книга содержит исчерпывающую информацию для всех желающих научиться програм-мировать на языке Swift с целью создания собственных iOS-приложений (а также OS X-, watchOS- и tvOS-приложений). В ходе чтения книги вы встретите не только теоретические сведения, но и большое количество практических примеров и заданий, выполняя которые вы углубите свои знания в изучаемом материале. Несмотря на то что вам предстоит пройти большой путь, это будет полезный и очень важный опыт. Книга не показывает, как писать iOS-приложе-ния, она предназначена для изучения самого языка программирования Swift. Книга даст вам возможность освоить новый язык и в скором времени приступить к написанию собственных приложений для App Store или Mac App Store. Изучив язык, в дальнейшем вы сможете самостоятельно выбрать, для какой платформы создавать программы — для iOS, OS X, tvOS или watchOS. Примеры кода в данной книге соответствуют Swift версии не ниже 2.1, iOS версии не ниже 9.1 и Xcode версии не ниже 7.1. Если у вас более новые версии, не беспокойтесь, весь описанный материал с большой долей вероятности будет без каких-либо ошибок работать и у вас.

Источник

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

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

Язык Swift молод, он растет, развивается и изменяется, хотя основные подходы к программированию и разработке уже сформировались. В новом, пятом издании книги была полностью переработана первая часть книги, что делает знакомство с языком Swift более комфортным, а весь текст актуализирован в соответствии с возможностями Swift 5.
В ходе долгого и плодотворного общения с читателями появилось множество идей, благодаря которым новое издание стало еще более полезным и насыщенным учебными материалами. Теперь вы не только изучите Swift, но и получите начальные сведения о принципах разработки полноценных приложений.
Мир Swift постоянно меняется, людей со значительным багажом знаний и опыта за плечами еще просто не существует в силу возраста языка, поэтому вы можете стать одним из первых специалистов.

130472

Компьютер Mac.
Прежде чем приступить к разработке программ на языке Swift в macOS, вам потребуется несколько вещей. Для начала понадобится компьютер iMac, MacBook, Mac mini или Mac Pro с установленной операционной системой macOS. Лучше, если это будет macOS Mojave (10.14). В этом случае вы сможете использовать последнюю версию среды разработки Xcode и языка Swift.

Это первое и базовое требование связано с тем, что среда разработки приложений Xcode создана компанией Apple исключительно с ориентацией на собственную платформу.

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

ОГЛАВЛЕНИЕ.
Читателю.
Введение.
О Swift.
О книге.
О домашних заданиях.
Исправления в пятом издании.
Для кого написана книга.
Что нужно знать, прежде чем начать читать.
Структура книги.
Условные обозначения.
От издательства.
Часть I. Подготовка к разработке Swift-приложений.
Глава 1. Подготовка к разработке в macOS.
Глава 2. Подготовка к разработке в Linux.
Глава 3. Подготовка к разработке в Windows.
Часть II. Базовые возможности Swift.
Глава 4. Отправная точка.
Глава 5. Фундаментальные типы дан.
Часть III. Контейнерные типы данных.
Глава 6. Кортежи (Tuple).
Глава 7. Последовательности и коллекции.
Глава 8. Диапазоны (Range).
Глава 9. Массивы (Array).
Глава 10. Наборы (Set).
Глава 11. Словари (Dictionary).
Глава 12. Строка — коллекция символов (String).
Часть IV. Основные возможности Swift.
Глава 13. Операторы управления.
Глава 14. Опциональные типы данных.
Глава 15. Функции.
Глава 16. Замыкания (closure).
Глава 17. Дополнительные возможности.
Глава 18. Ленивые вычисления.
Часть V. Введение в разработку приложений.
Глава 19. Консольное приложение «Сумма двух чисел».
Глава 20. Консольная игра «Отгадай число».
Часть VI. Нетривиальные возможности Swift.
Глава 21. Введение в объектно-ориентированное программирование.
Глава 22. Перечисления.
Глава 23. Структуры.
Глава 24. Классы.
Глава 25. Свойства.
Глава 26. Сабскрипты.
Глава 27. Наследование.
Глава 28. Псевдонимы Any и AnyObject.
Глава 29. Инициализаторы и деинициализаторы.
Глава 30. Удаление экземпляров и ARC.
Глава 31. Опциональные цепочки.
Глава 32. Расширения.
Глава 33. Протоколы.
Глава 34. Разработка приложения в Xcode Playground.
Глава 35. Универсальные шаблоны.
Глава 36. Обработка ошибок.
Глава 37. Нетривиальное использование операторов.
Часть VII. Введение в мобильную разработку.
Глава 38. Разработка приложения под iOS.
Глава 39. Паттерны проектирования при разработке в Xcode.
Заключение.

Скачать pdf
Ниже можно купить эту книгу по лучшей цене со скидкой с доставкой по всей России. Купить эту книгу

Источник

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

Отрывок. Глава 6. Кортежи (Tuple)

Возможно, вы никогда не встречались в программировании с таким понятием, как кортежи, тем не менее это одно из очень полезных функциональных средств, доступных в Swift. Кортежи, к примеру, могут использоваться для работы с координатами. Согласитесь, куда удобнее орудовать конструкцией (x, y, z), записанной в одну переменную, чем создавать по отдельной переменной для каждой оси координат.

6.1. Основные сведения о кортежах

Кортеж (tuple) — это объект, который группирует значения различных типов в пределах одного составного значения.

Кортежи представляют наиболее простой из доступных в Swift способ объединения значений произвольных типов. У каждого отдельного значения в составе кортежа может быть собственный тип данных, который никак не зависит от других.

Литерал кортежа

Кортеж может быть создан с помощью литерала кортежа.

• значение: Any — очередное значение произвольного типа данных, включаемое в состав кортежа.

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

ПРИМЕЧАНИЕ

Далее по тексту будет встречаться большое количество блоков «Синтаксис». В них описывается, каким образом могут быть использованы рассматриваемые конструкции в реальных программах. Прежде чем перейти к данным блокам, необходимо описать структуру этого блока, а также используемые элементы.

Первой строкой всегда будет определяться непосредственно сам синтаксис, описывающий использование конструкции в коде программы. При этом могут использоваться условные элементы (как, например, значение_1, значение_2 и значение_N в синтаксисе, приведенном выше). Обычно они написаны в виде текста, позволяющего понять их назначение.

Далее могут следовать подробные описания условных элементов. В некоторых случаях элементы могут группироваться (как в синтаксисе выше, где вместо элементов значение_1, значение_2 и т. д. описывается элемент значение, требования которого распространяются на все элементы с данным названием).

После имени условного элемента может быть указан его тип данных. При этом если в качестве элемента должно быть использовано конкретное значение определенного типа (к примеру, строковое, числовое, логическое и т. д.), то тип отделяется двоеточием (:). Если же в качестве элемента может быть использовано выражение (например, a+b или r > 100), то тип будет указан после тире и правой угловой скобки, изображающих стрелку (->). Может быть определен как один (например, Int), так и множество типов данных (например, Int, String).

В синтаксисе выше используется Any в качестве указателя на тип данных. Any обозначает любой тип данных. В процессе изучения вы будете встречать все новые и новые типы, которые могут быть указаны в данном блоке синтаксиса.

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

Объявление переменной и константы и инициализация им литерала кортежа, состоящего из N элементов, в качестве значения. Для записи кортежа в переменную необходимо использовать оператор var, а для записи в константу — оператор let.

Листинг 6.1

В данном примере myProgramStatus — константа, содержащая в качестве значения кортеж, описывающий статус работы некоей программы и состоящий их трех элементов:

Тип данных кортежа

Но если кортеж группирует значения различных типов данных в одно, то какой же тогда тип данных у самого кортежа и параметра, хранящего его значение?

Тип данных кортежа — это фиксированная упорядоченная последовательность имен типов данных элементов кортежа.

Тип данных обрамляется в круглые скобки, а имена типов элементов отделяются друг от друга запятыми. Порядок указания имен типов обязательно должен соответствовать порядку следования элементов в кортеже.

Пример

Типом данных кортежа myProgramStatus из листинга 6.1 является (Int, String, Bool). При этом тип данных задан неявно, так как определен автоматически на основании элементов кортежа. Так как порядок указания типов данных должен соответствовать порядку следования элементов в кортеже, тип (Bool, String, Int) является отличным от (Int, String, Bool).

В листинге 6.2 производится сравнение типов данных различных кортежей.

Листинг 6.2

Консоль

Для сравнения типов данных кортежей используются значения, возвращаемые глобальной функцией type(of:), определяющей тип переданного в него объекта.
Предположим, что в кортеже myProgramStatus первым элементом вместо целочисленного должно идти значение типа Float. В этом случае можно явно определить тип данных кортежа (через двоеточие после имени параметра) (листинг 6.3).

Листинг 6.3

Вы не ограничены каким-либо определенным количеством элементов кортежа. Кортеж может содержать столько элементов, сколько потребуется (но помните, что не рекомендуется использовать больше семи элементов). В листинге 6.4 приведен пример создания кортежа из четырех элементов одного типа. При этом используется псевдоним типа данных Int, что не запрещается.

Листинг 6.4

6.2. Взаимодействие с элементами кортежа

Кортеж предназначен не только для установки и хранения некоторого набора значений, но и для взаимодействия с этими значениями. В этом разделе мы разберем способы взаимодействия со значениями элементов кортежа.

Инициализация значений в параметры

Вы можете одним выражением объявить новые параметры и проинициализировать в них значения всех элементов кортежа. Для этого после ключевого слова var (или let, если объявляете константы) в скобках и через запятую необходимо указать имена новых параметров, а после оператора инициализации передать кортеж. Обратите внимание, что количество объявляемых параметров должно соответствовать количеству элементов кортежа (листинг 6.5).

Листинг 6.5

Консоль:

С помощью данного синтаксиса можно с легкостью инициализировать произвольные значения сразу нескольким параметрам. Для этого в правой части выражения, после оператора инициализации, необходимо передать не параметр, содержащий кортеж, а литерал кортежа (листинг 6.6).

Листинг 6.6

Консоль:

Переменные myName и myAge инициализированы соответствующими значениями элементов кортежа («Тролль», 140). При использовании данного синтаксиса вы можете игнорировать произвольные элементы кортежа. Для этого в качестве имени переменной, соответствующей элементу, который будет игнорироваться, необходимо указать символ нижнего подчеркивания (листинг 6.7).

Листинг 6.7

В результате в переменную statusCode запишется значение первого элемента кортежа — myProgramStatus. Остальные значения будут проигнорированы.

ПРИМЕЧАНИЕ

Символ нижнего подчеркивания в Swift обозначает игнорирование параметра. Это не единственный пример, где он может быть использован. В дальнейшем при изучении материала книги вы еще неоднократно с ним встретитесь.

Доступ к элементам кортежа через индексы

Каждый элемент кортежа, помимо значения, содержит целочисленный индекс, который может быть использован для доступа к данному элементу. Индексы всегда расположены по порядку, начиная с нуля. Таким образом, в кортеже из N элементов индекс первого элемента будет 0, а к последнему можно обратиться с помощью индекса N-1.

При доступе к отдельному элементу индекс указывается через точку после имени параметра, в котором хранится кортеж. В листинге 6.8 приведен пример доступа к отдельным элементам кортежа.

Листинг 6.8

Консоль:

Доступ к элементам кортежа через имена

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

В листинге 6.9 показан пример определения имен элементов кортежа через литерал.

Листинг 6.9

Указанные имена элементов могут быть использованы при получении значений этих элементов. При этом применяется тот же синтаксис, что и при доступе через индексы, когда индекс указывался через точку после имени параметра. Определение имен не лишает вас возможности использовать индексы. Индексы в кортеже можно задействовать всегда.

В листинге 6.10 показано, как используются имена элементов совместно с индексами.

Листинг 6.10

Консоль:

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

Листинг 6.11

Редактирование кортежа

Для однотипных кортежей можно производить операцию инициализации значения одного кортежа в другой. Рассмотрим пример в листинге 6.12.

Листинг 6.12

Кортежи myFirstTuple и mySecondTuple имеют один и тот же тип данных, поэтому значение одного может быть инициализировано в другой. У первого тип задан явно, а у второго через инициализируемое значение.
Индексы и имена могут использоваться для изменения значений отдельных элементов кортежа (листинг 6.13).

Листинг 6.13

Кортежи очень широко распространены в Swift. К примеру, с их помощью вы можете с легкостью вернуть из вашей функции не одно, а несколько значений (с функциями мы познакомимся несколько позже).

ПРИМЕЧАНИЕ

Кортежи не позволяют создавать сложные структуры данных, их единственное назначение — сгруппировать некоторое множество разнотипных или однотипных параметров и передать в требуемое место. Для создания сложных структур необходимо использовать средства объектно-ориентированного программирования (ООП), а точнее, классы или структуры. С ними мы познакомимся в дальнейшем.

Для Хаброжителей скидка 25% по купону — Swift

По факту оплаты бумажной версии книги на e-mail высылается электронная книга.

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • swift клиент серверное приложение
  • swift для детей самоучитель по созданию приложений для ios pdf