Хотя название Лекции 3 этого курса «Developing iOS 10 Apps with Swift» совпадает с названием Лекции 3 курса «Developing iOS 9 Apps with Swift» на этой Лекции очень отчетливо видно, что профессор Пол Хэгерти сделал небольшой разворот всего курса от ОБЪЕКТНО-ОРИЕНТИРОВАННОГО программирования, которое напоминает “Дикий Запад” с объектами, на которые указывает множество людей, к ФУНКЦИОНАЛЬНОМУ программированию с множеством неизменяемых объектов с APIs похожими на математические функции.
Конечно, iOS вовсе не была сконструирована на основе идеи функционального программирования. Но люди, которые изобретали Swift, держали “в голове” идею о функциональном программировании. Так что при разработке вашего iOS приложения (по крайней мере в части Модели) вы можете использовать множество элементов функционального программирования.
Это новый рубеж в iOS программировании, потому что в течение 20 -30 лет люди в основном использовали в iOS программировании только reference type объекты, имея в виду концепцию объектно-ориентированного программирования. Но когда вы программируете с помощью структур structs и перечислений enums, и особенно если вы подключаете механизмы протоколов Protocols (рассматриваются позже) и Generics, то вы можете реально сделать прекрасную работу, имеющую дело с реальным функциональным программированием.
И хотя темы в Лекции 3 нового курса примерно те же, акценты расставлены совсем по-другому. Теперь на первом месте value types, а о reference types — лишь мимоходом, подробно о структурах structs и перечислениях enums, а о классах classes — лишь мимолетом. Очень подробно о диапазонах Range<T> и о том, при каких условиях Range<T> становится последовательностью Sequence и позволяет применять к себе синтаксическую конструкцию for in. Кстати, единственный оставшийся в Swift оператор for.
Лекция 3 начинается с подробного рассказа о том, что представляет собой Optional и как интерпретировать такой «синтаксический сахар» для него, как ?, ! и ??, а также «цепочки» Optional.
Очень большое внимание уделено массивам Array<T>, словарям Dictionary <Key, Value>, строкам String и их интересным методам filter, map reduce, имеющим в качестве входных аргументов замыкания.
В отличие от других языков программирования в Swift строки String — сложный объект, способный представить строку на любом языке Мира с помощью Unicode, а с другой стороны достаточно быстродействующий и удобный в программировании благодаря введению новой абстракции CharacterView -символа в «человеческом восприятии» независимо от внутреннего представления. Так что разработчики Swift проделали сверхъестественную работу по соблюдению баланса между обоими сторонами конфликта, и профессор очень подробно рассказывает о том, как всем этим воспользоваться при написании кода.
Подробно представлен синтаксис именования параметров функций в Swift. Рассматриваются самые «крутые» возможности свойств: Наблюдатели willSet{} и didSet {} и отложенная инициализация lazy.
В Лекции 3 очень основательно рассказывается об инициализации, но так, чтобы, по возможности, ее можно было бы избежать.
Использованию специальноых типов Any и AnyObject уделено некоторое внимание. В версии iOS 10 они встречается редко и используется только как средство совместимости со старыми Objective-C APIs или как «непрозрачный» объект типа Property List в UserDefaults.
Лекция 3 и слайды на английском языке находятся на iTunes название “3. More Swift and the Foundation Framework.
Русскоязычный неавторизованный конспект лекции 3, хронометрированный через каждые 5 минут, и представленный в виде PDF-файла, который можно скачать и использовать offline, а также Google Doc доступны на платной основе.