В третий день WWDC были более технические и менее «интригующие» сессии (Integrating Swift with Objective-C, What's New in LLVM, Cross Platform Nearby Networking, Creating Custom iOS User Interfaces и т.д.), прошли мастер-классы по использованию компонентов и погружению в Swift.
Отчет Артура mc_murphy Сахарова, Redmadrobot
СЕССИЯ Integrating Swift with Objective-C
- Swift очень классно интегрируется в текущие objC-проекты. Видно, что Apple этот вопрос очень серьезно прорабатывала — все для того, чтобы разработчики скорее переходили на Swift. Проект может быть одновременно написан на двух языках. Когда в objC-проект добавляется первый .swift-файл, Xcode создает так называемый Bridging Header — это то, что будет видно из кастомных objC-классов в Swift-коде. Очень похоже на precompiled header в objC-проекте. Все фреймворки видно и без него. Ну и из objC-кода видно весь Swift. Довольно просто и понятно, и всем легко управлять.
- Когда в Swift вызываем собственный метод класса, не нужно писать self. То есть self.view превращается в просто view. Ну наконец-то. Весь синтаксис objC-классов транслируется в Swift на лету. Писали файл с классом MyClass на objC, переключились в другое окно со Swift-кодом, и подсказка по классу MyClass будет тут же выглядеть так, как будто он написан на Swift. Без перекомпиляции, все на лету.
- Доходит до того, что трансляция на лету вытворяет такие вещи автоматически: InitWithData:(NSData*)data type:(NSString*)type ⟷ init(data: NSData, type: String), то есть автоматически убирается/подставляется With в init-конструкциях.
- Напоследок общее правило — из objC-кода весь Swift-код выглядит как objC. Из Swift-кода весь objC-код выглядит как Swift. Документация, комментарии, синтаксис — все переводится автоматически.
СЕССИЯ Building Adaptive Apps with UIKit
- iOS 8 упрощает верстку для разросшегося семейства устройств (iphone 4/5, ipad, разные ориентации).
- Все кейсы верстки на всех устройствах сведены к 4 разновидностям: по горизонтали и по вертикали может быть либо Compact, либо Normal верстка (этот параметр называется sizeClass). То есть для каждого вью можно раздельно предусмотреть вид в этих четырех случаях:
compact width, normal height
compact width, compact height
normal width, compact height
normal width, normal height
И этого достаточно для всех устройств и всех ориентаций. И все это можно сделать в одном сториборде мышкой.
- Навбары автоматически скрываются или уменьшаются, когда недостаточно места, в landscape статус-бар вообще скрывается.
- В симуляторе появились resizable ipad и resizable iphone — то есть можно просто задать размер экрана в пикселях, и все сразу на лету будет переверстываться. Удобно для дебага. Apple явно что-то замышляет с разными размерами экрана под iOS...
- В ассетах UIImage добавили под это дело специальные коллекции (TraitCollections), откуда картинка выбирается согласно текущему размеру элемента на экране. То есть забываем про @2x, теперь верстка динамическая, помимо ретина/неретина появились айпад/неайпад и горизонтально/вертикально. И на основе всего этого будет выбираться текстурка.
- В IB добавили всякие штуки, которые позволяют создавать constraints раздельно для разных размеров/ориентаций. Таким образом, элементы теперь можно располагать вертикально в portrait и горизонтально в landscape ориентациях, не добавляя ни строчки кода. В целом интерфейс создания всего этого выглядит довольно понятно и удобно.
- Все это отлично можно просматривать в IB на лету. Открыть сразу много девайсов и следить, как себя ведут constraints при изменении, без компиляции и запуска.
СЕССИЯ Swift Playgrounds
Playgrounds — это вообще прорыв в процессе разработки. Playgrounds в себя много всего собрали в удобной форме.
Хотим мы проверить что-то, какую-то фичу. Вместо того, чтобы создавать пустой проект и что-то в нем писать, настраивать и запускать много раз — это как открыть блокнот и в интерактивном режиме все проверить.
Что такое Swift Playground?
- Playground — это такой формат документа для Xcode. В него входят файлы кода и ресурсы.
- Каждый раз при изменении кода он автоматически запускается и тут же появляется результат.
- И код, и результат отображаются в одном окне бок о бок.
Зачем нужны Playgrounds?
- Изучать новый язык
- Знакомиться с интерактивной документацией
- Обучать новичков разработке вообще
- Быстро прототипировать алгоритмы и тестировать их
- Писать код, который что-то рисует, без его запуска каждый раз
- Для визуализации любого кода, который что-то вычисляет
- Для экспериментов с API и игры с фреймворками
Что умеют Playgrounds?
- В них можно в любой строке кода посмотреть объекты в QuickLook.
- В них рендерятся UITableView, и при изменении кода тут же видны изменения.
- Если что-то в них не рендерится, можно написать custom QuickLook для любого своего класса.
- Можно отлаживать асинхронные операции и смотреть данные из всех тредов сразу.
- Было демо того, как разработать алгоритм insertSort в плейграунде и проиллюстрировать для себя все шаги алгоритма. Впечатляюще.
Что нельзя делать в Playgrounds?
- Они не поддерживают user interaction ни в каком виде, все можно менять только через код.
- Это исполняется только в симуляторе, не на устройстве.
- Нельзя импортировать свои фреймворки (однако можно скопипастить код из них).
WWDC 2014. Первые впечатления очевидца
WWDC 2014. Срез второго дня
Автор: redmadrobot