Лекция 2 CS193P Winter 2017 — MVC; Демонстрация iOS 10, Xcode 8 и Swift 3.

На Лекции 2 профессор подробно с картинками объясняет использование паттерна MVC для разработки iOS приложений.

Затем следует продолжение демонстрационного приложения Калькулятор, начатого на прошлой лекции. Происходит разделение кода Модели и кода, обслуживающего View Controller. Появляется новая структура struct CalculatorBrain, которая представляет лагерь Модель. Возможно вы привыкли использовать структуры struct в других языках и думаете о них, как о маленькой коллекции других переменных. В Swift структура struct — это “гражданин” первого класса, очень похожий на класс class. У класса class и структуры  struct много отличий, но самых главных два:

  1. Классы classes имеют наследование (inheritance), а структуры structs — нет.
  2. Классы classes ”живут” в “куче”, и у вас есть на них указатели.  Классы classes используют стиль передачи по ссылке reference types. Структуры structs НЕ ”живут” в “куче” и передаются повсюду путем их копирования (точнее с использованием механизма copy-on-write). Мы называем этот стиль передачи value types.

Профессор показывает, как проектировать Модель с использованием структуры struct CalculatorBrain, отталкиваясь от  public API Модели,  как добиться расширяемой функциональности в структурах struct, ведь мы не можем использовать создание subclass, как в классе class. Показано создание вложенных структур  struct и перечислений enum. На очень коротких фрагментах кода объясняется, когда стоит применять Optional, а когда — нет, исходя из семантического содержания Optional. Очень подробно рассказывается о перечислениях enum и о том, что Optionals также являются enum. Оба имеют ассоциированные значения, но в случае с enum они  могут быть любыми, в том числе и замыканиями (closure).

Читать далее

Лекция 1 CS193P Winter 2017 — Введение в iOS 10, Xcode 8 и Swift 3. Часть 2.

Лекция 1 и слайды на английском языке находятся на  iTunes название “1. Introduction to iOS 10, Xcode 8, and Swift 3.”

На сайте представлен полный неавторизованный хронометрированный конспект Лекции 1 на русском языке.

Первая часть Лекции 1 CS193P Зима 2017 — 0 — 40 минута находится здесь,
Вторая часть Лекции 1 CS193P Зима 2017 — 40 — 85 минута — находится в этом посте.

Этот же конспект можно посмотреть в PDF файле:

Лекция 1 CS193P Winter 2017 iOS 10 (1).pdf


Код демонстрационного примера для Лекции 1 находится на Github в папке Calculator I.

———   ПРОДОЛЖЕНИЕ КОНСПЕКТА  ——————-

—————— 40-ая минута Лекции ——————
Вы впервые видите локальную переменную var digit в Swift. Ключевое слово var означает, что это локальная переменная. Ее имя — digit. Если вы хотите указать тип этой переменной, например, String, то вам нужно разместить после имени переменной тип : String точно также, как это сделано для аргумента sender.
Но в Swift мы обычно этого не делаем,

потому что Swift — строго типизированный язык программирования, другими словами, вы везде должны определять тип. Он хочет знать типы всего, чего угодно. Он может “выводить” (infer) тип прямо из контекста и очень часто это делает. Это своего рода компромисс. Если у нас действительно сильно типизированный язык программирования, то вы вынуждены указывать тип абсолютно везде. Но совершенно прекрасно, когда компилятор может определить для вас какой тип имеет тот или иной элемент. Поэтому мы перестаем указывать тип, если это возможно.
При определении аргумента sender функции touchDigit мы не можем этого сделать, потому что мы должны знать, что ожидается на входе этого метода. Но для локальных переменных мы практически всегда можем не указывать тип.
Итак у нас есть локальная переменная digit, и я хочу установить ее равной чему-то.
Чему она должна быть равна?
Я хочу, чтобы она была равна заголовку (title) кнопки sender, которая послала мне сообщение touchDigit. Я хочу спросить у кнопки sender, какой у нее заголовок.
Как вы можете послать сообщение другому объекту в Swift?
Вы просто печатаете объект, которому хотите послать сообщение и добавляете точку “. :
Читать далее

Лекция 1 CS193P Winter 2017 — Введение в iOS 10, Xcode 8 и Swift 3. Часть 1.


Добро пожаловать на курс Стэнфорда CS193P. Это курс “Разработка iOS 10 приложений на Swift 3” Winter  2017.

Лекция 1 и слайды на английском языке находятся на  iTunes название “1. Introduction to iOS 10, Xcode 8, and Swift 3.”

На сайте представлен полный неавторизованный хронометрированный конспект Лекции 1 на русском языке.

Первая часть — 0 — 40 минута находится в этом посте,
Вторая часть — 40 — 85 минута — находится здесь.

Этот же конспект можно посмотреть в PDF файле:

Лекция 1 CS193P Winter 2017 iOS 10 (1).pdf


Код демонстрационного примера для Лекции 1 находится на Github в папке Calculator I.

На Лекции 1 профессор Пол Хэгерти представляет этот курс, озвучивает каковы предварительные требования для его успешного прохождения и дает беглый обзор iOS 10. Затем полностью погружается в очень большой и продолжительный демонстрационный пример.

Темы демонстрационного примера:

  • Создание проекта Project в Xcode 8
  • Построение пользовательского интерфейса (UI)
  • iOS симулятор
  • print (вывод на консоль, используя \( ) нотацию)
  • Определение класса в Swift, включая определение переменных экземпляра класса и методов
  • Связывание свойств (переменных экземпляра класса) в Swift коде с элементами пользовательского интерфейса UI (Outlets)
  • Привязка элементов UI к методам в коде Swift (Actions)
  • Доступ к iOS документации из кода
  • Optionals (?, неявное развертывание путем декларирования со знаком !, явное развертывание с помощью ! и if let)
  • Вычисляемые свойства (computed property)

За этими сухими пунктами скрывается блестящее изложение основных синтаксических конструкций Swift, начиная от самых элементарных и заканчивая такими сложными и непривычными как Optional и неявно развернутое Optional (implicitly unwrapped  Optional). Очень небольшое количество языков программирования имеет концепцию Optional. Это действительно крутая концепция, которую обязательно нужно понять, ибо в Swift она встречается повсюду, ей пронизаны всех iOS APIs. Но требуется некоторое время, чтобы к ней привыкнуть и эффективно ее использовать.

В заключении профессор показывает, как с помощью вычисляемой переменной (computed property) можно превратить неуклюжий традиционно написанный код в шедевр минималистического стиля.

Поэтому для начинающих изучать Swift (а не программирование как таковое) Лекции 1 и 2 являются must have. В Лекции 2 продолжится демонстрационный пример, начатый на этой Лекции.

Читать далее

Стэнфордский курс «Developing iOS 10 Apps with Swift» теперь доступен на iTunes.

Стэнфордский курс  «Developing  iOS 10 Apps with Swift» теперь доступен на iTunes. Это долгожданное обновление предыдущего курса по  «Developing iOS 9 Apps with Swift» для версии Swift 3. Выложены пока 3 лекции и первое Задание на программирование.

Русскоязычный вариант неавторизованного конспекта этого курса будет появляться по мере готовности на этом сайте.

ОБСУЖДЕНИЕ МАТЕРИАЛОВ курса «Разработка iOS приложений с Swift» проводится на private новом форуме на Piazza. Вопросы можно задавать там.
Для регистрации вам необходимо пройти по ссылке:

http://piazza.com/moscow_physical_engineering_institute_bestkora.com/spring2017/mf141
и набрать private  код mf141.
В качестве предварительных требований к этому курсу указаны стэнфордские курсы CS106A&B и CS107. В настоящий момент они выложены на сайте Инженерной Школы Стэнфорда в очень удобной форме.

Неофициально на Youtube выложены первые 3 лекции курса «Developing iOS 10 Apps with Swift».

Неофициально в Youtube выложены первые 3 Лекции курса «Developing iOS 10 Apps with Swift»:

Лекция 1. Overview of iOS.

Лекция 2. Model View Controller.

Лекция 3. More Swift & Foundation Framework.