Лекция 2 CS193P Fall 2017 — MVC.

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

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

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

Профессор рассказывает, как проектировать Модель, отталкиваясь от ее public API.   На очень коротких фрагментах кода показано, как исходя из семантического содержания Optional, можно легко и просто построить всю логику игры Концентрация, как использовать преимущества механизма copy-on-write (COW), действующего в структурах struct.
Как синхронизировать Модель и View Controller.

Попутно Пол Хэгерти рассказывает о синтаксических конструкциях Swift 4 пока без всякой теории, просто на демонстрационном примере игры Концентрация. Но вы увидите огромный спектр возможностей языка программирования Swift от инициализаторов классов class и структур struct до lazy переменных, static переменных var и static методах func, до всевозможных способах обращения с Optional, включая неявно развернутое Optional!. Представлены методы gereric массивов Array<T>  и словарей Dictionary <Key, Value>.

Код демонстрационного примера для Лекции 2 находится на Github  для iOS 11  и на Github для iOS 12 в папке Concentration L2.

Лекция 2 и слайды на английском языке находятся на  iTunes название “2. MVC.”

Русскоязычный неавторизованный конспект Лекции 2, хронометрированный через каждые 5 минут, и представленный в виде PDF-файла, который можно скачать и использовать offline, а также в формате Google Doc доступны на платной основе.

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

  1. Добрый день,
    вчера я оплатил платные лекции, но ничего так лине получил.

    • Вы ошибочно указали в форме оплаты несуществующий адрес the.fear.dev@gmmail.com
      Я вам писала дважды по этому адресу, пытаясь получить от вас верный gmail.com адрес, но все бесполезно.
      Очень хорошо, что вы объявились. Вам высланы все необходимые приглашения и ссылки.
      Проверьте, вы их получили?

  2. Добрый день!
    Вчера была оплачена первая часть лекций, но на emeil ничего не пришло 🙁

    • В настоящий момент вам отправлены все необходимые приглашения к 1-ой и 2-ой частям курса iOS 11.

      • о, классно!
        Большое спасибо! И компенсация чудесная 🙂

  3. Добрый день, сегодня я оплатил платные лекции, но ничего так и не получил.

    • Вам отправлены все необходимые приглашения.

  4. Спасибо за оперативность! Вторая часть будет доступна?

    • Она уже доступна.
      https://bestkora.com/IosDeveloper/dostup-k-paketu-ios-11-chast-2/
      Заканчиваю переводить последнюю 12-ю лекцию из второй части и выложу ее через 2-3 дня.
      Но не торопитесь со второй частью. Курс реально непростой, некоторым не удается продвинуться дальше Лекции 5.
      Но все таки самое интересное и новое в iOS 11 именно во 2-ой части.
      Профессор излагает новый в iOS 11 механизм Drag&Drop просто фантастически просто и понятно.

  5. Оплатил, но, боюсь, забыл указать в реквизитах свой емейл. Оплата первой части примерно в 16:42 по МСК.

    • правда сумму оплаты я не проверил и вышло 497,5 + комисся = 500 (с меня 2,5 руб. в следующей оплате) 😉

      • Не переживайте — все нормально, комиссия не в счет.

    • Вам отосланы все необходимые приглашения по указанному gmail.

  6. Здравствуйте, я заплатил сегодня утром, но до сих пор ничего не пришло. Понимаю, что в течение 24 часов, но можно в виде исключения, пожалуйста, пораньше)))

    • Дмитрий, если вы платили через Beeline, то в вашем платеже нет gmail, который мне нужен для того, чтобы дать вам доступ, и не указана какая часть какого курса вам нужна. Мы вас разыскиваем с утра, уже сделали запрос в Beeline, чтобы как-то с вами связаться.
      Я не смогу вам дать доступ по mail.ru.
      Пришлите мне ваш gmail.com, пожалуйста.

  7. Добрый день

    Никак не могу понять один момент в примере:

    game.choseCard(at: cardNumber)
    updateViewFromModel()

    Почему в момент, когда обе карты выбраны, т.е. имеют значение isFaceUp = true и isMatched = true — идет следом функция updateViewFromModel — которая по идее должна сразу обновить viuw-ху, но почему-то это не происходит. И только в следующий клик по 3-й уже карте отрабатывает эту функцию.

    Проверил весь пример(( Но так и не понял

    Буду признателен

    • Не очень понятно, чего вы ждете от UI, когда выбраны 2 карты. Если выбирается вторая карта, и у обоих карт isFaceUp = true и isMatched = true , то при обращении к функции updateViewFromModel вторая карта ложится «лицом» вверх (используется то, что обе карты имеют isFaceUp = true). И теперь уже две карты лежат лицом вверх. Но в классе concentration в функции chooseCard(at index: Int) мы устанавливаем переменную var indexOfOneAndOnlyFaceUpCard в nil :

      Поэтому, когда вы кликните на 3-ей карте, то предыдущие две карты перевернутся лицом вниз, то есть их isFaceUp = false, хотя для них все еще isMatched = true, поэтому функция updateViewFromModel переворачивает их «лицом» вниз. И если они совпали, то есть их isMatched = true, то они становятся невидимыми, а если нет, то остаются лежать «лицом» вниз

      Код находится здесь

      • Доброго вечера, Татьяна!

        Во-первых, огромное спасибо за ваш труд!
        Во-вторых, спасибо за оперативный ответ!

        Да, я был не внимателен и забыл про этот код — нижний прямоугольник. Спасибо!

  8. Привет! Подскажите, с какого курса лучше начинать обучение. Сравнивал лекции ios 11 с лекциями ios 10. В этих курсах есть значительные отличия… Например в ios 10 рассматривают Core Data, обработку ошибок и т.д. В курсе ios 11 этого нет. Или эти курсы практически одинаковы, только различия в названиях лекций? Буду очень признателен за ответ. Спасибо!

    • Курсы разные. Курс iOS 11 отражает последние тенденции, которые появились только в iOS11 : технология Drag & Drop, создание приложений, основанных на документах UIDocument, последние усовершенствования языка Swift в версии Swift 4 и особенно использование протокола Codable для сохранения Модели в виде JSON.
      Начальная часть курса (лекции 1-4), где собственно и демонстрируются возможности языка Swift,тоже разная:
      в курсе iOS 10 рассматривается Калькулятор, в котором во всю используются перечисления enum, которые являются в Swift полноценными структурами данных наряду с классами classes и структурами struct. Если вы пройдете эту часть курса iOS 10 с Калькулятором, включая первые 3 домашних Задания, то вы будете общаться с перечислениями enum на «ты», включая ассоциированные значения в виде Optional замыканий и прочее.
      в курсе iOS 11 в первых 4-х Лекциях и первых 4- Заданиях рассматривается обновленный вариант карточной игры «на совпадение», который читался профессором еще в курсе iOS 7 и для Objective-C, это мои любые демонстрационные примеры еще с поры iOS 7, но здесь нет практически перечислений enum, так что вы не получите в курсе iOS 11 того богатого опыта общения с перечислениями enum как в курсе iOS 11, но зато работа с протоколами Equatable, Hashable с расширениями extension.
      В курсе iOS 11 при рассмотрении «постоянного хранения» профессор объясняет, что каждый семестр он будет посвящать целую неделю (2 Лекции) какому-то одному механизму постоянного хранения (Persistence), и каждый раз это будут разные механизмы.

      Вы можете познакомиться с двумя Лекциями о Core Data на курсе CS193P Winter 2017 iOS 10 на русском языке на этом сайте:

      Лекция 10 CS193P Winter 2017 — Core Data (Объектно-ориентированная база данных).

      Лекция 11 CS193P Winter 2017 — Core Data Demo (Демонстрационное приложение).

      Вы можете познакомиться с двумя Лекциями о Cloud Kit на курсе CS193P Spring
      2016 iOS 9 на русском языке на этом сайте:

      Лекция 15 CS193P Spring 2016 — Application Lifecycle («жизненный цикл» приложения), Alerts и Cloud Kit.

      Лекция 16 CS193P Spring 2016 — Notification и Cloud Kit.

      В этом семестре «звездой» механизма постоянного хранения является UIDocument и UIDocumentBrowserViewController, потому что в iOS 11 все сложилось в пользу создания приложений, основанных на документах, то есть Document based Apps.

      Начинайте с курса iOS 11 — он более современный и с ним легче работать в Xcode 9, а потом вернетесь к тому, что вам будет недоставать. 

      • Огромное спасибо за такой подробный ответ!

    • Вам высланы все необходимые приглашения.

    • Вам высланы все необходимые приглашения.

    • Вам отправлены все необходимые приглашения для доступа.

  9. Доброго времени суток. Как оплатить и получить доступ ко всем лекциям данного курса?

    • Первая часть пакета конспектов Лекций по iOS 11 Осень 2017 г. состоит из лекций 1 — 6. Оплата здесь.

      Вторая часть пакета конспектов Лекций по iOS 11 Осень 2017 г. состоит из лекций 7 — 12.

      Третья часть пакета конспектов Лекций по iOS 11 Осень 2017 г. состоит из лекций 13 — 17.
      Я советую Вам преобрести сначала 1-ую часть и посмотреть, подходит ли она Вам, так как курс реально очень трудный.

  10. Добрый день! Какую сумму оплачивать, чтобы получить доступ к лекциям?

    • Все находится на главной странице этого курса https://bestkora.com/IosDeveloper/ios-11-swift-4/ в самом низу.
      Там предлагаются 3 части:

      Первая часть пакета конспектов Лекций по iOS 11 Осень 2017 г. состоит из лекций 1 — 6. Оплата здесь.

      Вторая часть пакета конспектов Лекций по iOS 11 Осень 2017 г. состоит из лекций 7 — 12.

      Третья часть пакета конспектов Лекций по iOS 11 Осень 2017 г. состоит из лекций 13 — 17.
      Я советую Вам преобрести сначала 1-ую часть и посмотреть, подходит ли она Вам, так как курс реально очень трудный.

  11. Здравствуйте.
    Оплатил: Первая часть пакета конспектов Лекций по iOS 11 Осень 2017 г.
    Двумя платежами: 490 рублей + 10 рублей. Не учел с карты будет комиссия на кошелек.
    Почта: procsitehcom2009@gmail.com

    • Нет проблем. Вам высланы на вашу почту все необходимые приглашения.

  12. Здравствуйте. Прошло уже больше суток с момента оплаты второго пакета лекций, а доступа к ним я все еще не получил.

    • Сергей, извините. Что-то пропустили.
      Даю Вам доступ ко 2-ой части пакета.
      В качестве компенсации за эту оплошность предоставляю Вам бесплатный доступ к 3-ей части курса.

    • Добрый день, Валерий.
      Ваши деньги получены.
      Даю Вам доступ к 1-ой части.

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