Материал: iOS сессия ответы

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

  1. Объявление, инициализация и изменение значения. Виды операторов. Переменные и константы. Виды объектов.

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

Основные виды операторов:

Простые операторы, выполняющие операции с некоторыми значениями (операндами). В их состав входят унарные и бинарные операторы.

Унарные операторы выполняют операцию с одним операндом (например, -a). Они могут находиться перед операндом, то есть быть префиксными (например, !b), или после него, то есть быть постфиксными (например, i?).

Бинарные операторы выполняют операцию с двумя операндами (например, 1+6). Оператор, который располагается между операндами, называется инфиксным.

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

Всего в Swift выделяют два типа хранилищ данных:

переменные, объявляемые с помощью ключевого слова var; константы, объявляемые с помощью ключевого слова let.

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

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

Виды объектов:

Глобальные объекты — это объекты, доступные в любой точке программы.

Локальные объекты — это объекты, доступные в пределах родительского объекта.

  1. Типы данных

Тип данных определяет, какая именно информация может храниться в параметре, а также какие операции можно производить. Если вам необходимо хранить данные текстового типа, то и параметр должен иметь текстовый тип данных, для целочисленных значений используют параметры с целочисленным типом данных и т. п.При написании кода мы работаем с разными типами данных Swift. Базовые типы, которые используются чаще всего:

1.String (текстовая строка);

2.Int (целое число);

3.Float (32-битное число с плавающей точкой);

4.Double (64-битное число с плавающей точкой для более длинных переменных);

5.Bool (логическое значение «true» или «false»).

String(строка символов)-cтроки бывают длинными (миллион и более букв), короткими (10 букв) или даже пустыми (без единой буквы). При этом все они работают одинаково.

Тип Int содержит целое число, т.е. число без дробной части. Это могут быть как положительные (простые), так и отрицательные целые числа: 3, 30, 300, -16777216.

Типы Float и Double. В Swift типы данных Float и Double используются для хранения чисел с плавающей запятой, например: 3,1; 3,141; 3,1415926; –16777216,5. Они отличаются между собой только количествомотображаемых цифр в десятичной части числа.

Тип Boolean. У Swift есть встроенный тип данных, который используется для хранения значений «true» и «false». Он называется Boolean или коротко Bool.

Тип данных Character позволяет хранить строковый литерал длиной в один символ.

  1. Ссылочные типы данных

В Swift есть два типа данных: ссылочный (referencetype) и значимый (valuetype). Ссылочный тип данных — нечто живое, то, что как-то реагирует и может изменять свое состояние. Значимый тип — нечто мертвое и не реагирующее, простые данные. 

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

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

4. Числовые типы данных. Арифметические операторы. Приведение числовых типов данных.

Числовые типы данных

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

Целочисленные типы данных(2 вида)

Целые числа

Это числа, у которых отсутствует дробная часть, например 81 или 18. Целочисленные типы данных бывают знаковыми и беззнаковыми.Swift поддерживает как знаковые, так и беззнаковые целочисленные типы данных. Для указания значения числовых типов используются числовые литералы.

Числовой литерал

Это фиксированная последовательность цифр, начинающаяся либо с цифры, либо с префиксного оператора «минус» или «плюс». Так, например, «2», «–64», «+18» — все это числовые литералы. Для объявления переменной или константы целочисленного типа необходимо использовать ключевые слова Int и Unit.

Арифметические операторы

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

Бинарный оператор сложения складывает первый и второй операнды и возвращает результат операции (a + b). Тип результирующего значения соответствует типу операндов.

varres = 1 + 2 // 3 +

Унарный оператор «плюс» используется в качестве префикса, то есть ставится перед операндом (+a). Возвращает значение операнда без каких-либо изменений. На практике данный оператор обычно не используется. varres = +3 -

Бинарный оператор вычитания вычитает второй операнд из первого и возвращает результат операции (a — b). Тип результирующего значения соответствует типу операндов.

varres = 4 — 3 // 1 -

Унарный оператор «минус» используется в качестве префикса, то есть ставится перед операндом (-a). Инвертирует операнд и возвращает его новое значение.

varres = -5

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

Бинарный оператор умножения перемножает первый и второй операнды и возвращает результат операции (a * b). Тип результирующего значения соответствует типу операндов.

varres = 4 * 5 // 20 /

Бинарный оператор деления делит первое число на второе и возвращает результат операции (a / b). Тип результирующего значения соответствует типу операндов.

varres = 20 / 4 // 5 %

Бинарный оператор вычисления остатка от деления двух целочисленных значений. Тип результирующего значения соответствует типу операндов. varres = 19 % 4 // 3

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

Приведение числовых типов данных

Как неоднократно говорилось, при проведении операций (в том числе арифметических) в Swift вы должны следить за тем, чтобы операнды были одного и того же типа. Тем не менее бывают ситуации, когда необходимо провести операцию со значениями, которые имеют разный тип данных. При попытке непосредственного перемножения, например, Int и Double, Xcode сообщит об ошибке и остановит выполнение программы. Такая ситуация не осталась вне поля зрения разработчиков Swift, поэтому в языке присутствует специальный механизм, позволяющий преобразовывать одни типы данных в другие. Данный механизм называется приведением (от слова «привести»), выполнен он в виде множества глобальных функций.

Имена вызываемых функций в Swift, с помощью которых можно преобразовать типы данных, соответствуют именам типов данных:

Int(_:) — преобразовывает переданное значение к типу данных Int.

Double(_:) — преобразовывает переданное значение к типу данных Double.

Float(_:) — преобразовывает переданное значение к типу данных Float.

Для применения данных функций в скобках после названия требуется передать преобразуемый элемент (переменную, константу, число). Рассмотрим пример, в котором требуется перемножить два числа: целое типа Int и дробное типа Double.

5. Текстовые типы данных. Инициализация строковых значений. Приведение к строковому типу данных. Объединение строк.

Текстовые типы данных.

Инициализация строковых значений.

Для работы с текстом предназначены два основным типа данных:

тип Character предназначен для хранения отдельных символов;

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

Строковый литерал — это фиксированная последовательность текстовых символов, окруженная с обеих сторон двойными кавычками ("").

Тип данных Character позволяет хранить строковый литерал длиной в один символ. Всего один символ! И не символом больше!

Тип данных String

С помощью типа данных String в параметрах могут храниться строки произвольной длины.

Приведение к строковому типу данных.

Непосредственной передача литерала, и специальная функияString(_:), для инициализации значения строкового типа.

Обьединение строк

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

При интерполяции происходит объединение строковых литералов, переменных, констант и выражений в едином строковом литерале.

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

6. Логические значения. Логические операторы.

Логические операторы проверяют истинность какого-либо утверждения и возвращают соответствующее логическое значение. Swift поддерживает три стандартных логических оператора:

логическое НЕ (!a);

логическое И (a && b);

логическое ИЛИ (a || b).

Унарный оператор логического НЕ является префиксным и записывается символом восклицания. Он возвращает инвертированное логическое значение операнда, то есть если операнд имел значение true, то вернется false, и наоборот. Для выражения !a данный оператор может быть прочитан как «не a».

Бинарный оператор логического И записывается в виде удвоенного символа «амперсанд» и является инфиксным.

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

Бинарный оператор логического ИЛИ выглядит как удвоенный символ прямой черты и является инфиксным.

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

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

7.Псевдонимы типов. Операторы сравнения. Операторы диапазона

Псевдонимы типов

Swift предоставляет возможность создания псевдонима для любого типа данных . Псевдонимом типа называется дополнительное имя, по которому будет происходить обращение к данному типу . Для создания псевдонима используется оператор typealias . Псевдоним необходимо применять тогда, когда существующее имя типа неудобно использовать в контексте программы (листинг 5 .38) .

Листинг 5.38

// определяем псевдоним для типа UInt8

typealiasageType = UInt8

/* создаем переменную типа UInt8,

используя псевдоним */

varmyAge: ageType = 29

В результате будет создана переменная myAge, имеющая значения типа UInt8 .

Операторы сравнения

Сравнениестрок Swift позволяет производить сравнение двух различных строк . Для этой цели используется оператор сравнения (==) . Рассмотрим пример в листинге 5 .28 .

Листинг 5.28

let firstString = "Swift"

letsecondString = "Objective-C"

letanotherString = "Swift"

firstString == secondString // false

firstString == anotherString // true

Значения, отображаемые в области результатов (false, true), определяют результат сравнения строк: false соответствует отрицательному результату, а true — положительному .

ПРИМЕЧАНИЕ Даннаяоперациясравненияназываетсялогическойоперацией. Онаможетбытьпроведенавтомчислеидлячисловыхзначений.

Операторы Диапазона

Swift включает два оператора диапазона, которые упрощают обозначение диапазона значений

Операторполуоткрытогодиапазона

Оператор полуоткрытого диапазона обозначается двумя точками и знаком меньше (..<) . Swift предлагает две формы данного оператора: бинарную (оператор размещен между операндами) и префиксную (оператор размещен перед операндом) .

Бинарнаяформаоператора

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

Пример:

varmyRange = 1..<500

Префикснаяформаоператора

Данная форма оператора используется перед операндом, позволяющим определить правую границу диапазона .

Пример:

varmyRange = ..<500

Операторзакрытогодиапазона

Оператор закрытого диапазона обозначается в виде трех точек (...) . Swift предлагает три формы: бинарная, префиксная (оператор расположен после операнда) и постфиксная .

Бинарнаяформаоператора

СИНТАКСИС

левая_граница...правая_граница

•левая_граница: Comparable—первыйэлементдиапазона,заданныйспомощью

сопоставимоготипаданных.

•правая_граница: Comparable—последнийэлементдиапазона,заданный спомощьюсопоставимоготипаданных.

Пример:varmyRange = 1...100

Постфикснаяформаоператора

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

СИНТАКСИСлевая_граница...

•правая_граница: Comparable—элемент,следующийзапоследнимэлементом диапазона,заданныйспомощьюсопоставимоготипаданных.

Пример:varmyRange = 10...

Префикснаяформаоператора

Данная форма, подобно префиксному полуоткрытому оператору, определяет только правую границу, но при этом включает ее в диапазон . СИНТАКСИС ...правая_граница •правая_граница: Comparable—последнийэлемент,заданныйспомощью сопоставимоготипаданных.

Пример:

varmyRange = ...0

8Кортежи. Объявление кортежа. Тип данных кортежа. Взаимодействие с элементами.

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

СИНТАКСИС

letимяКонстанты = (значение_1, значение_2, ..., значение_N)

varимяПеременной = (значение_1, значение_2, ..., значение_N)

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

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

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

СИНТАКСИС

(имя_типа_данных_элемента_1, имя_типа_данных_элемента_2, ..., имя_типа_данных_элемента_N)

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

Пример: (Int, Int, Double)

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

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

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

Листинг 6.5

// записываем значения кортежа в переменные

var (statusCode, statusText, statusConnect) = myProgramStatus

// выводим информацию

print("Код ответа — \(statusCode)")

print("Текст ответа — \(statusText)")

print("Связь с сервером — \(statusConnect)")

Консоль:

Код ответа — 200 Текст ответа — InWork Связь с сервером — true

9Опционалы. Извлечение опционального значения

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

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

ПРИМЕЧАНИЕ Важно не путать отсутствие какого-либо значения в опциональном типе данных с пустой строкой или нулем. Пустая строка — это обычный строковый литерал, то есть вполне конкретное значение переменной типа String, а ноль — вполне конкретное значение числового типа данных. То же относится и к пустым коллекциям.

У вас мог возникнуть вопрос: как Swift показывает, что в параметре опционального типа отсутствует значение? Для этого используется ключевое слово nil.

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

Листинг 14.2

type(of: convertPossibleString) // Optional.Type

type(of: convertUnpossibleString) // Optional.Type

Optional<Int> — это идентификатор опционального целочисленного типа данных, то есть значение такого типа может быть либо целым числом, либо отсутствовать полностью. Тип Int является базовым для этого опционала, то есть он основан на типе Int.

Извлечение опционального значения

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

Листинг 14.10

var a: Int = 4

var b: Int? = 5

a+b // ОШИБКА. Несоответствие типов

В переменной a хранится значение неопционального типа Int, в то время как значение b является опциональным (Int?).

Типы Int? и Int, String? и String, Bool? и Bool — все это разные типы данных. Для решения проблемы их взаимодействия можно применить прием, называемый извлечением опционального значения, или, другими словами, преобразовать опционал в соответствующий ему базовый тип.

Выделяют три способа извлечения опционального значения:

‰ принудительное извлечение;

‰ косвенное извлечение;

‰ операция объединения с nil (рассматривается в конце главы).

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

10* Операторы условий. Понятие потока, утверждения. Оператор условия if. Тернарный оператор условия.

Операторы управления можно разделить на две группы: 1. Операторы ветвления, определяющие порядок и необходимость выполнения блоков кода. 2. Операторы повторения, позволяющие многократно выполнять блоки кода. В качестве входных данных операторам передается выражение, вычисляя значение которого они принимают решение о порядке выполнения блоков кода (игнорировать, однократно или многократно выполнять).

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

Утверждение (глобальная функция assert(_:_:)).

Оператор условия if.

Оператор ветвления switch.

Операторы повторения while и repeatwhile.

Оператор повторения for.

Оператор раннего выхода guard.

Swift позволяет прервать выполнение программы в случае, когда некоторое условие не выполняется: к примеру, если значение переменной отличается от требуемого. Для этого предназначен специальный механизм утверждений (assertions). Утверждения в Swift реализованы в виде глобальной функции assert(_:_:).

СИНТАКСИС

assert(проверяемое_выражение, отладочное_сообщение)

• проверяемое_выражение –>Bool — вычисляемое выражение, на основании значения которого принимается решение об экстренной остановке программы.