В Лекции 3 подробно рассказывается о возможностях Swift и не только.
Вот повестка дня Лекции 3 :
- Autolayout тизер
- Краткий обзор того, что мы изучили в Concentration
- CountableRange чисел с плавающей точкой
- Кортежи Tuples
- Вычисляемые свойства (Computed Properties)
- Управление доступом (access control)
- assertions ( утверждения)
- extensions ( расширения)
- enum (перечисление)
- Optionals— это enums
- Обзор структур данных (включая управление памятью)
В начале Лекции показано, как создать UI игры Концентрация, который хорошо выглядит и при вращении iOS устройства, и на iPhone другого размера. Для этого решается ДВЕ проблемы: ОДНА — группировка карт-кнопок, а ВТОРАЯ — “пришпиливание” сгруппированных кнопок к краям экрана. Первая проблема решается с помощью Stack View, а вторая — путем установления связи между различными UI элементами на экране с помощью CTRL-перетягивания. Это не полный рассказ о мощном механизме Autolayout (ему будет посвящена в дальнейшем целая Лекция), а «легкая завлекательная» демонстрация ее возможностей.
Затем следует обзор того, что изучено за первую неделю (Лекции 1 и 2):
- Target / Action, Outlet и Outlet Collections
- Методы и свойства (они же переменные экземпляра)
- Наблюдатель Свойства (didSet {})
- Массив Array<Element>
- MVC
- Value types (struct, enum) против reference types (class)
- Методы Типа (static)
- lazy свойства
- цикл for in
- Словарь Dictionary<Key, Value>
- Преобразование Типов (например, UInt32(anInt))
Далее идет рассказ о синтаксических конструкциях Swift, при этом особое внимание уделяется вычисляемым свойствам, управлению доступом и расширению extension. Все эти возможности показаны в демонстрационном приложении — игре Концентрация.
Подробно освещаются возможности такой структуры данных, как перечисление enum, которое в Swift значительно мощнее, чем в других языках программирования. Это позволило показать «закулисное» функционирование такого синтаксического сахара Optional как ?, ! и ??, а также «цепочки» Optional, в мире перечислений enum.
В заключении лекции описано функционирование системы автоматического “подсчета ссылок” (Automatic Reference Counting — ARC) для REFERENCE TYPE объектов — классов class.
Код демонстрационного примера для Лекции 3 находится на Github для iOS 11 и на Github для iOS 12 в папке Concentration L3.
Лекция 3 и слайды на английском языке находятся на iTunes название “3. Swift Programming Language.”
Русскоязычный неавторизованный конспект Лекции 3, хронометрированный через каждые 5 минут, и представленный в виде PDF-файла, который можно скачать и использовать offline, а также в формате Google Doc доступны на платной основе.
В этой лекции есть такой момент где один из студентов задает вопрос:
«ВОПРОС: Поддерживает ли кортеж ( tuple ) индексирование? Типа получить элемент номер 1 или получить элемент номер 2?
ОТВЕТ: В действительности, НЕТ. Если вам реально нужно индексирование, то лучше использовать массив Array.» Возможно произошла ошибка, поскольку к объекту кортежа можно обращаться по индексу:
let httpError = (404, «Not Found»)
print(«Status code: \(httpError.0)»)
Нет, это не ошибка.
Хотя httpErro.0 и httpErro.1 и выглядят как индексы и начинаются как индексы с 0 и далее, это не индексы, а имена элементов кортежа по умолчанию наподобие именования аргументов замыкания $0, $1, $2….
Вы не можете использовать в кортежах полноценную индексацию : httpErro[0], httpErro[1].
Не можете искать элемент по индексу, то есть делать обычные операции с индексами.
В кортежах 0, 1 и т.д. — это имена по умолчанию, чтобы не придумывать.
В документации Swift проводится мысль, что кортежи лучше использовать как временные структуры, например, при возврате множества значений из функции. И не стоит строить свою функциональность на кортежах.
Если вам действительно нужна полноценная индексация в вашей архитектуре, то для однородных элементов лучше использовать массивы Array, а для неоднородных — словарь Dictionary или массив перечислений enum.
Собственно, студент, задавая вопрос, как раз и подводил профессора к этим анонимным именам по умолчанию 0,1 и т.д.
Профессор четко дал понять, что не приветствует их использование ( может быть по соображениям читабельности кода или еще по каким-то причинам), но он следует логике Apple: кортежи — это временные структуры данных, а не те, на которых стоит строить логику функционирования своего приложения.