Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СЕССИЯ ОТВЕТЫ / iOS сессия ответы.docx
Скачиваний:
21
Добавлен:
25.12.2020
Размер:
14.45 Mб
Скачать

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 — вычисляемое выражение, на основании значения которого принимается решение об экстренной остановке программы.

• отладочное_сообщение ->String — выражение, текстовое значение которого будет выведено на отладочную консоль при остановке программы. Необязательный параметр.

Функция «утверждает», что переданное ей выражение возвращает логическое значение true. В этом случае выполнение программы продолжается, в ином (если возвращен false) — выполнение программы завершается, и в отладочную консоль выводится сообщение

Пример

// утверждение с двумя аргументами

assert( someVar> 100, "Данные неверны" )

// утверждение с одним аргументом

assert( anotherVar<= 10 )

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

Утверждения, с которыми вы только что познакомились, являются упрощенной формой оператора условия. Они анализируют переданное выражение и позволяют либо продолжить выполнение программы, либо завершить его (возможно, с выводом отладочного сообщения). Оператор if позволяет определить логику вызова блоков кода (исполнять или не исполнять) в зависимости от значения переданного выражения. Данный оператор используется повсеместно, благодаря ему можно совершать именно те действия, которые необходимы для получения корректного результата. К примеру, если пользователь нажал кнопку «Умножить», то необходимо именно перемножить, а не сложить числа. Оператор условия if имеет четыре формы записи, различающихся по синтаксису и функциональным возможностям:

‰ сокращенная;

‰ стандартная;

‰ расширенная;

‰ тернарная.

Тернарный оператор условия

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

СИНТАКСИС

проверяемое_выражение ? выражение_1 : выражение_2

проверяемое_выражение ->Bool — вычисляемое выражение, на основании значения которого принимается решение об исполнении кода, находящегося в блоке.

• выражение_1 ->Any — выражение, значение которого будет возвращено, если проверяемое выражение вернет true.

• выражение_2 ->Any — выражение, значение которого будет возвращено, если проверяемое выражение вернет false.

Пример

var y = ( x> 100 ? 100 : 50 )

В данном примере в переменной y будет инициализировано значение одного из выражений (100 или 50)

11. Оператор if для опционалов. Опциональное связывание. Оператор раннего выхода guard.

Соседние файлы в папке СЕССИЯ ОТВЕТЫ