В Лекции 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 доступны на платной основе.