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

 

Курс CS193p Winter 2017 «Developing iOS 10 Apps with Swift» на подходе.

Стэнфордский курс CS193p Зима 2017 «Developing iOS 10 Apps with Swift» уже появился на iTunes, но пока там только заголовок и описание. По-видимому, идет оформление, и первые лекции появятся в ближайшее время.
1 февраля ссылка на этот курс в iTunes исчезла. Я не знаю, что это означает — идет оформление материала, курс будет выложен позже или не будет выложен вообще (что уже было осенью 2015 года). Ждем развития событий.

Concurrency (многопоточность) в Swift 3 (GCD и Dispatch Queues).

Надо сказать, что многопоточность (сoncurrency) в iOS всегда входит в вопросы, задаваемые на интервью разработчикам iOS приложений, а также в число топ ошибок, которые делают программисты при разработке iOS приложений. Поэтому так важно владеть этим инструментом в совершенстве.

Итак, у вас есть приложение, оно работает на main thread (главном потоке), который отвечает за выполнение кода, отображающего ваш пользовательский интерфейс (UI). Как только вы начинаете добавлять к вашему приложению такие затратные куски кода, как загрузка данных из сети или обработка изображений на main thread (главном потоке), то работа вашего пользовательского интерфейса  начнет сильно замедляться и даже может привести к полному его «замораживанию». 

Как вы можете изменить архитектуру вашего приложения, чтобы таких проблем не возникало? В этом случае на помощь приходит сoncurrency или многопоточность , которая позволяет одновременно выполнять две или более независимые задачи (tasks): вычисления, загрузку данных из сети или с диска, обработку изображений и т.д.

Процессор в каждый заданный момент времени может выполнять один из ваших потоков (threads).
В случае одноядерного процессора, сoncurrency или многопоточность достигается многократными кратковременными переключениями между «потоками» (threads), на которых выполняются задачи (tasks), создавая достоверное представление об одновременном выполнении задач на одноядерном процессоре.  На многоядерном процессоре многопоточность достигается тем, что каждому «потоку», связанному с задачей, предоставляется свое собственное ядро для запуска. Обе эти технологии используют общее понятие многопоточности (сoncurrency).

Своеобразной платой за введение многопоточности в вашем приложениии является трудность обеспечения безопасного выполнения кода на различных потоках (thread safety). Как только мы позволяем заданиям (tasks) работать параллельно, появляются проблемы, связанные с тем, что разные задания (tasks) захотят получить доступ к одним и тем же ресурсам, например, захотят изменять одну и ту же переменную в разных потоках, или захотят получить доступ к ресурсам, которые уже заблокированы другими заданиями. Это может привести к разрушению самих ресурсов, используемых операциями на других потоках.

В iOS программировании многопоточность  предоставляется разработчикам в виде нескольких инструментов:  Thread Grand Central Dispatch (сокращенно  GCD) и Operation — и используется с целью увеличения производительности и отзывчивости пользовательского интерфейса. Мы не будем рассматривать Thread, так как это низкоуровневый механизм, а сосредоточимся на GCD и Operation (объектно-ориентированном API, построенном поверх GCD).

Читать далее

CS193P Winter 2016-17 (iOS 10 и Swift 3) будет выложен в iTunes ближе к концу января — началу февраля 2017 г.

На стэнфордском сайте курса CS193P профессор Пол Хэгерти уже сделал объявление о том, что в iTunes материалы курса  CS193P Winter 2016-17 (iOS 10 и Swift 3) будут выложены через несколько недель после начала зимнего семестра 2017 г. А зимний семестр Winter 2016-17 для курса CS193P начинается 9 января 2017 года и заканчивается 17 марта 2017г.

Ждем с большим интересом. Будет интересно. Перевод на русский планируется.

Наш форум переезжает на Piazza

Уважаемые пользователи сайта bestkora.com.

Наш форум переезжает на Piazza! Обсуждение стэнфордских курсов CS193P по разработке iOS приложений на Swift (iOS 7, iOS 8, iOS 9 и будущего iOS10) мы будем проводить на  Piazza — том же инструменте, на котором профессор Пол Хэгерти проводит обсуждение со своими студентами. Чем быстрее вы начнете спрашивать на  Piazza вопросы по лекциям, демонстрационным примерам и заданиям стэнфордского курса CS193P, тем быстрее вы почувствуете преимущество накопленных здесь знаний ваших коллег и инструкторов. Вместо того, чтобы посылать email, вы можете послать свой вопрос на  Piazza и ваши коллеги и я постараемся ответить на него. Мы приветствуем любые ваши вопросы по тем направлениям разработки iOS приложений на Swift, над которыми вы работаете — даже если они заданы анонимно.
Я постараюсь постепенно перенести наиболее интересные вопросы с нашего старого форума на  Piazza.

Вы можете зарегистрироваться на новом форуме по ссылке, при этом надо указать private код курса mf141.

CS193P Stanford Spring 2016. Задание 6. Анимация. Решение. Ощутите «магию» Swift 3 на простейшей игре Breakout с Dynamic Animation.

screen-shot-2016-11-08-at-8-20-54-pm

Screen Shot 2015-09-11 at 10.50.23 AM

Текст Домашнего задания на английском языке доступен на iTunes «Developing iOS 9 Apps with Swift. Programming Project 6: Animation»Текст Задания 6 на русском  языке размещен в PDF — файле

Задание 6 iOS 9.pdf


Для выполнения Задания 6 необходимо освоить материал Лекции 14.
В качестве прототипа кода для Задания 6 можно использовать код приложения «Dropit L14«, полученный на Лекции 14, который доступен на сайте Stanford для Swift 2 и Xcode 7 ; для Xcode 8 и Swift 2.3  — на Github, для  Xcode 8 и Swift 3 — на Github, для Xcode 8Swift 3 и iOS 10 — на Github.
В этом посте подробно описывается выполнение обязательных и дополнительных пунктов Задания 6. В посте представлен код для  Xcode 8Swift 3 и iOS 10, который находится на Github в разделе Breakout_Assignment_6.

Да, будем выполнять Домашнее Задание 6 сразу для iOS 10 и Swift 3, потому что Задание 6 не связано с данными, получаемыми из сети, не связано с существенно усовершенствованными в iOS 10  фреймворками Core Data и UserNotifications. Приложение Задания 6 будет очень простым в архитектурном плане — там не будет ни SplitViewController, ни специальных seguesPopovers, Unwind Segues, Embedded Segues, Modal Segues. Оно будет представлять собой два слабо связанных между собой MVC, объединенных простейшим множественным MVCTabBarController. В Задании 6 нам предлагается продемонстрировать умение работать с системой Dynamic Animation, управляя динамическими элементами в виде UIViews. Кроме того, мы можем в таком простейшем приложении показать все возможные механизмы запуска кода — код в iOS приложениях не исполняется линейно, отдельные его фрагменты можно запустить с помощью:

  1.  жестов,
  2.  методов «жизненного цикла» UIViewController ( viewWillAppear, viewDidLoadviewDidLayoutSubviews и т.д.) и UIViewlayoutSubviews )
  3.  Наблюдателей Свойства didSet{ }, willSet{ },
  4.  lazy ( отложенной) инициализации,
  5.  инициализации в виде выполняемого замыкания ( с круглыми скобками «()» в конце),
  6.  делегирования, которое реализуется в Swift свойствами в виде замыканий,
  7. вычисляемых переменных с хранением в другом месте (другое свойство, NSUserDefaults, Core Data).

Все эти механизмы мы будем использовать в нашем простейшем приложении и они могут не только давать очень понятный и компактный код, но и вызывать автоматический каскадный запуск вычислений, которые вы только описали и не запускали явно. Это создает действительно «магическое» впечатление.

Читать далее

Невероятная «легкость бытия» с Core Data в iOS 10 и Swift 3.

Мы рассмотрим выполнение Задания 5 для курса «Developing iOS 9 Apps with Swift» на Swift 3 для iOS 10.
Почему это интересно?
Особенный интерес связан не столько со Swift 3, сколько с Core Data, который до выхода iOS 10 являлся одним из самых непонятных и сложных в использовании фреймворков, особенно в многопоточной среде.  На WWDC 2016 Apple представила в iOS 10 одну из самых значительных модернизаций Core Data со времен iOS 5.

Возможности новой Core Data в iOS 10

Во главе нового Core Data стоит класс NSPersistenceContainer, представляющий собой прекрасный полноценный Core Data Stack, который очень просто создать и использовать.  Класс NSPersistenceContainer снабжает вас очень простым  API:

screen-shot-2016-10-21-at-5-54-14-pm

Как это видно из названия, управление «видимыми» объектами Core Data осуществляется View Controllers на main queue с использованием viewContext. Очень легко работать с объектами Core Data в фоновом (background) режиме c помощью контекста, возвращаемого методом newbackgroundContext(). Но еще лучше, проще и оптимальнее выполнять различные операции с Core Data в фоновом (background) режиме с помощью метода performBackgroundTask(_:), который сам предоставляет разработчикам NSManagedObjectContext для выполнения этих операций:

screen-shot-2016-10-23-at-7-58-25-pm

Такой простой public API существенно снизит порог вхождения в Core Data.

Читать далее