- •Объявление, инициализация и изменение значения. Виды операторов. Переменные и константы. Виды объектов.
- •Типы данных
- •4. Числовые типы данных. Арифметические операторы. Приведение числовых типов данных.
- •5. Текстовые типы данных. Инициализация строковых значений. Приведение к строковому типу данных. Объединение строк.
- •6. Логические значения. Логические операторы.
- •Как проверить, есть ли значение в переменной с опциональным типом данных?
- •12* Операторветвления switch. Fallthrough. Where.
- •13.Сұрақ. Кортежи в операторе switch
- •Наборы: объявление набора, создание пустого набора, доступ к набору и модификация набора.
- •Оператор while
- •Оператор repeatwhile
- •24 Функции: объявление, синтаксис вызова функции. Примеры.
- •Заметка
- •25.Входные аргументы и возвращаемое значение
- •Глава 15 • Функции 245
- •26 Функция в качестве входного аргумента
- •27.Кортеж в качестве возвращаемого значения
- •28. Функционалдымүмкіндіктер. Функционалдытүрі. Функция аргумент ретінде.
- •29. Күрделіфункционалды тип. Қайтарумәніретінде функция
- •30. Кірістірілгенфункциялар. Функциянышамадантысжүктеу.
- •31. Рекурсивный вызов функций. Безымянные функции.
- •32.Замыкания. Функция как замыкания
- •33. Замыкание.Замыкающие выражение
- •Неявные возвраты из замыканий с одним выражением
- •Сокращенные имена аргументов
- •Создание нового отсортированного массива#
- •Сортировка существующего массива на месте#
- •Сортировка массива с пользовательским заказом#
- •38.Объектно-ориентированное программирование в Swift. Экземпляры
- •43. Собственны еинициализаторы
- •44. Методы в структурах
- •45.Сыныптар құрылымдарға өте ұқсас, бірақ олар бірнеше маңызды нүктелермен ерекшеленеді.
- •Переопределение свойств
- •52.Псевдоним Any.Приведение типа Any.Псевдоним AnyObject
- •53.Инициализаторы
- •54.Деинициализаторы
- •Создание Auto Layout и его составляющих
- •. Понятие Segues. Виды Segues.
- •59. Создание программируемых переходов. (ProgrammaticSeguesiniOs)
- •60 .Передачаданныхмеждуконтроллерами. (Passing Data Between Controllers)
- •Отображение данных в мобильном приложении ввиде списка. Работа с таблицами в iOs (Working With Tables)
- •Понятие делегата и протокола на примере работы с таблицами. Назначение и принцип работы. (Table delegates and protocols)
- •Опциональные протоколы
- •Использование протоколов
- •Делегаты
- •Создание и отображение данных в ячейках (Creating custom table cell)
- •Принципы работы с Core Data (Working With Core Data, Saving to Core Data, Fetching data from Core Data, Deleting items from Core Data)
- •Понятие и назначение rest & crud (Understanding rest & crud)
- •67.Асинхронды
- •68. Создание post запросов (Making post requests)
- •Размеры и другие детали внешнего исполнения[править | править код]
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 является типом данных, то можно объявить новое хранилище (переменную) данного типа.