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

38.Объектно-ориентированное программирование в Swift. Экземпляры

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

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

Класс является описанием объекта, а объект представляет экземпляр этого класса. Можно еще провести следующую аналогию. У нас у всех есть некоторое представление о человеке - наличие двух рук, двух ног, головы, пищеварительной, нервной системы, головного мозга и т.д. Есть некоторый шаблон - этот шаблон можно назвать классом. Реально же существующий человек (фактически экземпляр данного класса) является объектом этого класса.

Для определения класса используется ключевое слово class, после которого идет название класса:

В данном случае класс называется User. Все тело класса заключается в фигурные скобки.

Класс может содержать переменные и константы, которые хранят состояние объекта. Переменные и константы, определенные в классе, еще называют хранимые свойства класса (storedproperties). Например:

Здесь класс User определяет две переменных age и name, которые хранят соответственно возраст и имя пользователя.

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

Кроме переменных и констант в классе могут определены методы. Методы представляют собой функции, ассоциированные с определенным типом - классом, перечислением или структурой:

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

Чтобы создать объект класса используется инициализатор, который представляет собой следующую конструкцию:

После названия класса идут пустые скобки. Эта конструкция создает объект, ссылку на который хранит переменная tom. Определение переменных и констант класса ничем не отличается от других переменных и констант.

После создания объекта класса мы сможем обращаться к его свойствам и методам. Для обращения к ним используется нотация точки. То есть после названия переменной tom ставится точка, после которой идет название свойства/метода:

Ключевое слово self

Ключевое слово self позволяет обратиться к текущему экземпляру класса:

39.Перечисления. Вложенные перечисления.

Возвращает последовательность пар ( n , x ), где n представляет собой последовательное целое число, начинающееся с нуля, а x представляет собой элемент последовательности.

func enumerated() -> EnumeratedSequence<Array<Element>>

Когда вы перечисляете коллекцию, целая часть каждой пары является счетчиком для перечисления, но не обязательно является индексом парного значения. Эти счетчики могут использоваться в качестве индексов только в экземплярах коллекций с целочисленным индексом, начинающихся с нуля, таких как Array . Для других коллекций счетчики могут быть вне диапазона или неправильного типа для использования в качестве индекса. Чтобы перебрать элементы коллекции с ее индексами, используйте функцию.ContiguousArrayzip(_:_:)

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

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

40-сұрақОператор switchдля перечисления.

Для анализа и разбора значений перечислений можно использовать оператор switch.Рассмотрим пример котором анализируется значение переменной типа AdvancedCurrencyUnit.

switch dollarCurrency {

case .rouble:

print("Рубль") case let .euro(countries, shortname):

print("Евро. Страны: \(countries). Краткоенаименование: \ (shortname)")

case .dollar(let nation, let shortname):

print("Доллар \(nation). Краткое наименование: \(shortname) ") }

Консоль

Доллар usa. Краткое наименование: USD

В операторе switch описан каждый элемент перечисления AdvancedCurrencyUnit, поэтому использовать оператор default не обязательно. Доступ к ассоциированным параметрам реализуется связыванием значений: после ключевого слова case и указания значения в скобках объявляются константы, которым будут присвоены ассоциированные с членом перечисления значения. Так как для всех ассоциированных параметров создаются константы со связываемым значением, оператор let можно ставить сразу после ключевого слова case (это продемонстрировано для члена euro)

41-сұрақ Свойства и методы в перечислениях.

Свойства позволяют хранить в перечислении вспомогательную информацию. Мы уже неоднократно встречались со свойствами в процессе изучения Swift. Свойство в перечислении — это хранилище, аналогичное переменной или константе, объявленное в пределах перечисления и доступное через его экземпляр. В Swift существует определенное ограничение для свойств в перечислениях: в качестве их значений не могут выступать фиксированные значения-литералы, а лишь замыкания. Такие свойства называются вычисляемыми. При каждом обращении к ним происходит вычисление присвоенного замыкания с возвращением получившегося значения.Объявим вычисляемое свойство для разработанного ранее перечисления .За основу возьмем перечисление Smile и создадим вычисляемое перечисление, которое возвращает связанное с текущим членом перечисления значение.

enum Smile:

String { case joy = ":)"

case laugh = ":D"

case sorrow = ":("

case surprise = "o_O"

// вычисляемоесвойство

var description: String {return self.rawValue} }

varmySmile: Smile = .sorrowmySmile.description // ":("

Методы в перечислениях

Методы — это функции внутри перечислений, поэтому их синтаксис и возможности идентичны синтаксису и возможностям изученных ранее функций. Вернемся к примеру с перечислением Smile и создадим метод, который выводит на консоль справочную информацию о предназначении перечисления

enumSmile: String {

casejoy = ":)"

caselaugh = ":D"

casesorrow = ":("

casesurprise = "o_O"

vardescription: String {returnself.rawValue} funcabout(){

print("Перечисление содержит список смайликов ") } }

varotherSmile = Smile.joyotherSmile.about()

Консоль Перечисление содержит список смайликов

42-сұрақ Структуры.Синтаксис объявление структур.Свойства в структурах.

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

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

СИНТАКСИС

structИмяСтруктуры {

// свойства и методы структуры

}

Объявим структуру, которая будет описывать сущность «игрок в шахматы»

structPlayerInChess {}

varoleg = PlayerInChess() t

ype(of:oleg)

//PlayerInChess.Type

Так как структура PlayerInChess является типом данных, то можно объявить новое хранилище (переменную) данного типа.

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