Лекция 3 CS193P Fall 2017 — Swift.

В Лекции 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 доступны на платной основе.

Лекция 3 CS193P Fall 2017 — Swift.: 2 комментария

  1. В этой лекции есть такой момент где один из студентов задает вопрос:
    «ВОПРОС: Поддерживает ли кортеж ( 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: кортежи — это временные структуры данных, а не те, на которых стоит строить логику функционирования своего приложения.

Обсуждение закрыто.