Лекция 7 CS193P Winter 2017 — Обработка ошибок, Extensions, Протоколы, Делегирование и Scroll View.

В Лекции 7 рассматривается ряд важных тем :

  • Обработка ошибок в Swift
  • Расширения
  • Протоколы
  • Делегирование
  • Scroll View

Проектировщики языка Swift действительно усвоили уроки некоторых других языков программирования, в которых режим обработки ошибок слишком усложнен, поэтому Swift использует очень простой механизм для обработки ошибок. Рассматриваются методы с ключевым словом throws в конце декларирования, операторы try, try! и try?,  а также обработка ошибок с помощью блока do { } catch let error { }.

Далее следует рассказ о синтаксической возможности в Swift, которая называется extension (расширение). Расширение extension позволяет добавлять методы и свойства в другие классы, даже если у вас нет исходного кода этих  классов. Пол Хэгерти демонстрирует очень прагматичный пример использования extension для класса UIViewController, которое упрощает использование  Navigation Controller в Split View Controller. Далее он также будет использовать extension для подтверждения и реализации протокола UIScrollViewDelegate.

Большое внимание в Лекции 7 уделяется протоколам protocols в Swift, которые, по сути, очень просты и представляют собой лишь декларацию методов и свойств без «хранения». Протоколы protocols в Swift имеют множественное наследование, в отличии от классов classes.  Традиционно протокол protocol в Swift, как и в Objective-C, это ТИП и везде, где вы можете использовать обычные ТИПЫ, вы также можете использовать и protocol.
Но в Swift протоколы наделены особой силой и есть ряд продвинутых возможностей использования протоколов, о которых рассказано в Лекции 7. Это использование протоколов как ограничителей Generic ТИПОВ. Вы можете использовать Generics для декларации самих протоколов protocols.

На примере структуры  CountableRange, которую вы получаете, если используете диапазон 3..<5, профессор показывает как расширяются ее функциональные возможности по мере добавления протоколов.

Вы можете использовать extension протоколов для реализации некоторых методов по умолчанию, и в сочетании с Generic это позволяет обеспечить один и тот же код таким совершенно разным структурам данных, как массив Array, словарь Dictionary, множество Set, набор символов String.UTF16View и CountableRange

Далее представлена пара простого использования протоколов protocols, одним из которых является делегирование, как способ “слепой” структурированной коммуникации между вашим View и вашим Сontroller или между различными MVCs. Профессор все время подчеркивает, что технология делегирования пришла из мира Objective-C. Для Swift предпочтительно использование замыканий. Однако большинство классов UIKit, таких как UIScrollView, используют делегирование, поэтому подробно показано, как организовать эту технологию на примере использования Scroll View, у которого методы делегата UIScrollViewDelegate опираются на протоколы старого Objective-C  стиля.

В конце Лекции 7 демонстрируется работа Scroll View, показано как добавить  subviews к Scroll View, как установить контентную область для прокрутки  и какие действия небходимо выполнить, чтобы Scroll View начал прокручивать и масштабировать изображение.  Это сделано на примере создания MVC общего назначения Image View Controller, предназначенного для отображения изображений с возможностью прокрутки и масштабирования. Показано, как заставить систему транспортной безопасности приложений (App Transport Security)  открывать Web-страницы с адресами  http://, так как по умолчанию это в Xcode 8 не разрешено. 

Лекции и слайды на английском языке представлены в iTunes название “7. Error Handling, Extensions, Protocols, Delegation, and Scroll View.”. Код демонстрационного примера «L7 Cassini» доступен как на  iTunes название “Lecture 7 Demo Code: Cassini«, так и на Github.

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