С вами играет iPhone. Задание 2 Stanford CS 193P Fall 2017. Игра Set. Решение дополнительных пунктов.

Это продолжение решения Задания 2. Здесь мы рассмотрим решение некоторых дополнительных пунктов.

Решение обязательных пунктов Задания 2 и дополнительного пункта 3 представлены в посте «Задание 2 Stanford CS 193P Fall 2017. Игра Set. Решение обязательных пунктов.».

Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Programming: Project 2: Set″. На русском языке вы можете скачать текст Задания 2 здесь:

Задание 2 Игра Set iOS 11.pdf

Для решения Задания 2 необходимо ознакомиться с Лекциями 1 — 6.
Решение обязательных пунктов Задания 2 находится на Github для iOS 11 и на Github для iOS 12 в папке «Set II No Extra«.
Решение обязательных и дополнительных пунктов Задания 2 находится на Github для iOS 11 и на Github для iOS 12 в папке «Set II With Extra«.

Мы будем рассматривать выполнение дополнительных пунктов немного не в том порядке, как они представлены в тексте Задания 2, так как они частично уже описаны либо в решениях Задания № 1, либо в посте, посвященном выполнению обязательных пунктов Задания № 2. Мы сосредоточимся на выполнении самого интересного 4-го дополнительного пункта этого Задания, в котором необходимо предоставить пользователю играть напару с iPhone.

Читать далее

Лекция 6 CS193P Fall 2017 — Multitouch ( жесты).

В Лекции 6 продолжается рассмотрение гигантского демонстрационного примера, в котором с помощью игральной карты PlayingCardView рассказывается о том, что можно делать с пользовательскими (custom) views:

  • Создание пользовательского subclass UIView
  • Рисование с помощью Core Graphics и UIBezierPath
  • Режим contentMode у UIView (то есть перерисовка redraw против масштабирования битов при изменении границ bounds)
  • Рисование с прозрачностью
  • Больше ключей для словаря строки с атрибутами NSAttributedStringUIFont и NSParagraphStyle
  • UIFontMetrics масштабирование  шрифтов определенного стиля согласное c пользовательскими настройками (Setting) в Larger Text 
  • Управление subviews в вашем пользовательском UIView
  • Использование isHidden
  • Аффинные преобразования CGAffineTransform UIView
  • Приоритеты ограничений (Constraint Priority) в системе Autolayout
  • Assets.xcassets и рисование с помощью UIImage
  • @IBDesignable и @IBInspectable
  • Отображение изображений UIImage в Interface Builder

Читать далее

Задание 2 Stanford CS 193P Fall 2017. Игра Set. Решение обязательных пунктов.

Содержание

Цель задания состоит в том, чтобы дать вам возможность создать свое первое приложение полностью с “нуля” и самостоятельно. Оно достаточно похоже на Задание 1, которое помогло обрести вам уверенность, но достаточно отличающееся, чтобы дать вам полную свободу для накопления опыта!

Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Programming: Project 2: Set″. На русском языке вы можете прочитать текст Задания 2 здесь:, а скачать здесь:

Задание 2 Игра Set iOS 11.pdf

Начинаем выполнять Задание 2 c NewProject в Xcode.

Правила игры Set:

SET INSTRUCTIONS - RUSSIAN.pdf

Для решения Задания 2 необходимо ознакомиться с Лекциями 1 — 6.

Решение данного Задания 2 находится на Github для iOS 11 и на Github для iOS 12.

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

Пункты 1 и 2 обязательные

1. Реализуйте игру Set в версии соло (для одного игрока).

2. Разместите на экране по крайней мере 24 карты игры Set. В Set все карты всегда лежат “лицом” вверх.

 

Читать далее

Лекция 5 CS193P Fall 2017 — Рисование в iOS.

В начале Лекции 5 рассматриваются небольшие темы :

  • Обработка ошибок в Swift
  • Использование Any  в Swift
  • «Кастинг типа» с помощью оператора as?
  • Другие интересные классы: NSObject, NSNumber, Date, Data

Но основная тема Лекции 5 — это views. Профессор сразу вводит уточнения в терминологию.  Он использует слово «view«в двух контекстах. Один из них — это >MVC. Буква V предназначена для View. В этом контексте View означает множество обобщенных (generic) миньонов вашего Controller. Этот View с заглавной буквойV в слове “View”, содержит множество views. Это именно те views, которым посвящена большая часть Лекции 5 и которые являются subclasses класса UIView в iOS.

views — это прямоугольные области на экране, в которых мы рисуем и получаем от пользователя так называемые “жесты прикосновения” (touch gestures), как одинарные, так и множественные. Но на Лекции 4 ведется разговор только о рисовании, управление жестами перенесено в Лекцию 6. Никогда раньше в своих курсах Пол Хэгарти не уделял столько внимания рисованию Views. Возможно, это связано с тем, что компактность кода и богатство синтаксических конструкций Swift позволяют представить рисование как увлекательный и очень интеллектуальный процесс.

Читать далее

Лекция 4 CS193P Fall 2017 — Еще больше Swift.

Лекция 4 в основном теоретическая с небольшими демонстрационными примерами, рассеянными по всей Лекции и показывающими те или иные возможности Swift в действии. Это заключительная (дальше будет изучение iOS) и наиболее трудная Лекция, посвященная Swift. Но где еще вы можете увидеть такое концентрированное, логичное и понятное объяснение таких продвинутых возможностей Swift, как «множественное наследование» функциональности через протоколы protocols?

Читать далее

Задание 1 Stanford CS 193P Fall 2017. Игра Концентрация. Решение.

Содержание

Цель задания состоит в воспроизведении демонстрационного примера, представленного на Лекции, и в небольшом его усовершенствовании. Очень важно, чтобы вы понимали, что вы делаете на каждом шаге воспроизведения демонстрационного примера, тем самым подготовив себя к расширению возможностей игры Концентрация.

Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Programming: Project 1: Concentration″. На русском языке вы можете прочитать текст Задания 1 здесь:, а скачать здесь:

Задание 1 Игра Концентрация iOS 11.pdf

Начинаем выполнять Задание 1 с кода, полученного в конце Лекции 2. Профессор настоятельно рекомендует не копировать код первых 2-х Лекций, а непосредственно печатать его в Xcode, так как это даст хороший опыт освоения среды разработки Xcode 9.

Читать далее

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

В Лекции 3 подробно рассказывается о возможностях Swift и не только.

Вот повестка дня Лекции 3 :

  • Autolayout тизер
  • Краткий обзор того, что мы изучили в Concentration
  • CountableRange чисел с плавающей точкой
  • Кортежи Tuples
  • Вычисляемые свойства (Computed Properties)
  • Управление доступом (access control)
  • assertions ( утверждения)
  • extensions ( расширения)
  • enum (перечисление)
  • Optionals— это enums
  • Обзор структур данных (включая управление памятью)

Читать далее

Лекция 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.

Читать далее

Лекция 1 CS193P Fall 2017 — Введение в iOS 11, Xcode 9 и Swift 4. Часть 2.

На сайте представлен полный неавторизованный хронометрированный конспект Лекции 1 на русском языке курса  Разработка iOS 11 приложений с помощью Swift 4.

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

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

———   ПРОДОЛЖЕНИЕ КОНСПЕКТА  ——————-
——- 50 -ая минута лекции ———
Но метод touchCard вызывается ОБЕИМИ картами:

И в этом проблема.
Почему так произошло? Это произошло из-за того, что я копировал (⌘C Copy) и вставлял (⌘V Paste) карту с “привидением” ? для создания второй карты.  При проведении операции копирования и вставки происходит копирование всех методов. Это очень распространенная ошибка, которую очень легко сделать.
Конечно, я намеренно создал новую карту копированием, чтобы показать вам, как избавиться от вышеупомянутой  ошибки.
Для этого вам нужно кликнуть правой клавишей “мышки” (или CTRL -кликнуть) на элементе UI, и он вам покажет все свои связи (connections).
Давайте CTRL -кликнем на карте с “тыквой” ?:
Читать далее

Лекция 1 CS193P Fall 2017 — Введение в iOS 11, Xcode 9 и Swift 4. Часть 1.

На сайте представлен полный неавторизованный хронометрированный конспект Лекции 1 на русском языке курса  Разработка iOS 11 приложений с помощью Swift 4.

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

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

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

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

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

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

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

Читать далее