WWDC 2014. Новости среды
В третий день 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 UIKitiOS 8 упрощает верстку для разросшегося семейства устройств (iphone 4/5, ipad, разные ориентации). Все кейсы верстки на всех устройствах сведены к 4 разновидностям: по горизонтали и по вертикали может быть либо Compact, либо Normal верстка (этот параметр называется sizeClass). То есть для каждого вью можно раздельно предусмотреть вид в этих четырех случаях: compact width, normal heightcompact width, compact heightnormal width, compact heightnormal width, normal heightИ этого достаточно для всех устройств и всех ориентаций. И все это можно сделать в одном сториборде мышкой.Навбары автоматически скрываются или уменьшаются, когда недостаточно места, в landscape статус-бар вообще скрывается. В симуляторе появились resizable ipad и resizable iphone — то есть можно просто задать размер экрана в пикселях, и все сразу на лету будет переверстываться. Удобно для дебага. Apple явно что-то замышляет с разными размерами экрана под iOS… В ассетах UIImage добавили под это дело специальные коллекции (TraitCollections), откуда картинка выбирается согласно текущему размеру элемента на экране. То есть забываем про @2x, теперь верстка динамическая, помимо ретина/неретина появились айпад/неайпад и горизонтально/вертикально. И на основе всего этого будет выбираться текстурка. В IB добавили всякие штуки, которые позволяют создавать constraints раздельно для разных размеров/ориентаций. Таким образом, элементы теперь можно располагать вертикально в portrait и горизонтально в landscape ориентациях, не добавляя ни строчки кода. В целом интерфейс создания всего этого выглядит довольно понятно и удобно. Все это отлично можно просматривать в IB на лету. Открыть сразу много девайсов и следить, как себя ведут constraints при изменении, без компиляции и запуска. СЕССИЯ Swift PlaygroundsPlaygrounds — это вообще прорыв в процессе разработки. Playgrounds в себя много всего собрали в удобной форме.Хотим мы проверить что-то, какую-то фичу. Вместо того, чтобы создавать пустой проект и что-то в нем писать, настраивать и запускать много раз — это как открыть блокнот и в интерактивном режиме все проверить.Что такое Swift Playground? Playground — это такой формат документа для Xcode. В него входят файлы кода и ресурсы. Каждый раз при изменении кода он автоматически запускается и тут же появляется результат. И код, и результат отображаются в одном окне бок о бок. Зачем нужны Playgrounds? Изучать новый язык Знакомиться с интерактивной документацией Обучать новичков разработке вообще Быстро прототипировать алгоритмы и тестировать их Писать код, который что-то рисует, без его запуска каждый раз Для визуализации любого кода, который что-то вычисляет Для экспериментов с API и игры с фреймворками Что умеют Playgrounds? В них можно в любой строке кода посмотреть объекты в QuickLook. В них рендерятся UITableView, и при изменении кода тут же видны изменения. Если что-то в них не рендерится, можно написать custom QuickLook для любого своего класса. Можно отлаживать асинхронные операции и смотреть данные из всех тредов сразу. Было демо того, как разработать алгоритм insertSort в плейграунде и проиллюстрировать для себя все шаги алгоритма. Впечатляюще. Что нельзя делать в Playgrounds? Они не поддерживают user interaction ни в каком виде, все можно менять только через код. Это исполняется только в симуляторе, не на устройстве. Нельзя импортировать свои фреймворки (однако можно скопипастить код из них). WWDC 2014. Первые впечатления очевидцаWWDC 2014. Срез второго дня