Что такое SwiftUI и зачем он нужен

1

Через несколько лет, может быть уже через год или два, операционные системы Apple радикально изменятся внутри. И, конечно же, за этим последуют внешние изменения, и надеюсь, системы станут лучше. Небольшое число фрагментов этого будущего проходят обкатку в macOS Catalina и в последних версиях всех операционных систем Apple. И эти фрагменты впечатляют, похожи на магию, вызывают восхищение и немного глючат. Эта статья об одном из этих фрагментов. Для понимающих, но если вы хотите разобраться, тоже почитайте.

Разработка приложений скоро выйдет на новый уровень

Что такое SwiftUI

Слухам о том что Apple вот-вот, чуть ли не на днях, выпустит совершенно сказочный 16,5-дюймовый MacBook Pro “без рамок вокруг экрана”, с какой-то особенной клавиатурой, не подверженной “эффекту бабочки”, скоро исполнится год. Интересно, что произойдет раньше – и какие новые каверзы встретятся нам в этом ноутбуке? А что это за “особенная клавиатура”? Ножницы, или что-то опять что-то своё, оригинальное и передовое? И опять, в точности как год назад, тайваньские аналитики сообщают о массовом производстве этих MBP, ставших легендарными еще до появления на свет, и отслеживают поставки разных комплектующих для них. В прошлый раз, правда, оказалось что все эти комплектующие были для какого-то другого ноутбука – но разведка и аналитика рискованные профессии. Существует ли это MacBook Pro вообще? Я думаю нет. Если думаете иначе, поделитесь в нашем Telegram-чате.

А вот о том, что в Apple работают над новой “начинкой” операционных систем компании, и кое-что из этих разработок уже доступно сторонним разработчикам в Xcode 11, и в этих кусочках будущего Apple впервые в своей истории использует старый добрый Swift иначе чем прежде – никто как-будто не слышал. Реактивное и декларативное программирование давно не новость, и используются в индустрии не один десяток лет – но Apple, как в старые добрые времена, использует их иначе. Не удивлюсь если через пару-другую лет именно “яблочное” воплощение всего этого станет образцом для подражания, пока же пусть недоброжелатели и дальше умирают со смеху, наблюдая за потугами “дамы с причудами” культивировать в своем стеклянном дворце “древние новшества”.

SwiftUI на конференции WWDC 2019

Нельзя сказать что про SwiftUI никто ничего не пишет. Им восторгаются. До совершенства ему (“UI” расшифровывается и переводится как “пользовательский интерфейс”, значит это “он”) еще развиваться и развиваться, но задуман он настолько красиво и оригинально, что остаться равнодушным не получается. Его равняют с грязью (перечисляя функции которые есть в XAML, Flutter и в других аналогах, но нет в “новорожденном”). Его называют заменой AppKit (в macOS) и UIKit (в iOS и iOS-подобных системах), но это неправда. SwiftUI это отдельный фреймворк и составная часть Xcode 11, он берет на себя часть функций AppKit и UIKit, при этом используя функции AppKit и UIKit для, например, отображения интерфейсов и для их взаимодействия с пользователем. По словам одного из инженеров группы SwiftUI, это временно: в будущем на месте AppKit или UIKit будет что-то другое.

А вот жизненный путь Interface Builder (IB) приближается к концу – SwiftUI делает то же что и IB, только интереснее и эффективнее. В 1986 году доктор компьютерных наук Жан-Мари Юллó написал программу InterfaceBuilder (на LISP) для компании ExperTelligence. А LISP это, если вы не в курсе, “декларативный вариант Фортрана”. Однажды, в 1987 или в 1988 году, Жана-Мари привезли в офис NeXT и познакомили с Джобсом. В 1988 году в NeXTSTEP 0.8, в состав которой входил IB написанный на Objective-C. IB использовался при написании первого в мире браузера WorldWideWeb, и много чего еще – очень заслуженный старичок. Последнее его обновление случилось 8 лет назад, в 2011 году. На WWDC 2011 года много чего обещали в него добавить, то что показали в кулуарах смотрелось менее фантастично чем Canvas в SwiftUI, но для того времени это было бы здорово – увы. Эти функции так и не пришли в IB, и уже не прийдут.

IB и до 2011 обновляли нечасто, а с 2008 года число пользователей Xcode стремительно росло, и почти 90% новых пользователей писали программы для iPhone OS (как тогда называлась iOS), а из них IB в своей работе использовал каждый третий. Так сложилось. Писать для iPhone OS начали задолго (за полгода) до первой бета-версии iPhone SDK, и в программах от Apple следов IB (файлов с расширением Xib) не было. Стив обещал что в SDK обязательно будет IB, но заставить этот инструмент работать с мобильной ОС оказалось труднее, чем перенести его из LISP в Objective-C. В первых бетах SDK его не было. Вплоть до iPhone SDK 2.0 он отчаянно глючил, а именно тогда люди осваивались с новой для них системой, набирались опыта и обретали привычки. IB для iPhone глючил еще очень долго, чуть ли не до 2011 года. В macOS некоторые тоже пишут интерфейсы в коде, вручную – я знаю только одного такого чудака. Там IB тоже не без глюков, но их немного.

Использование Interface Builder в Xcode

В результате, пользовательские интерфейсы программисты iOS и iOS-подобных систем пишут либо с помощью IB, либо в исходном коде. Как пользователь IB с почти 20-летним стажем, утверждаю: увы, SwiftUI действительно “круче” чем IB. Это адекватная замена. Для рисующих интерфейсы в исходных кодах SwiftUI еще круче, потому что сейчас (в реальных программах SwiftUI пока еще почти не используется) для того, чтобы расположить на экране элемент интерфейса, пусть это будет текстовая строка, любая надпись, программист должен:

  • создать объект соответствующего типа;
  • вычислить координаты задающие положение объекта на экране;
  • разместить объект на экране;
  • задать значение объекта;
  • задать атрибуты текста (это несколько строк, как правило – шрифт, стиль, цвет и т.п.)

Это один из самых простых объектов – создание таблицы (списка) вручную может занять не одну сотню нетривиальных строк. Считается что в каждых ста строках нового кода, как минимум, должны оказаться две ошибки, которые не будут выявлены при тестировании и проявят себя только попав в руки пользователя. При увеличении числа строк в N раз число ошибок увеличивается в N в квадрате раз. В этой шутке есть доля шутки. Кстати, если вы не знаете что такое императивное программирование, вы только что увидели его “в лицо”.

В SwiftUI используется декларативная парадигма программирования, в рамках которой эта детализация и все эти тысячи строк становятся не нужны. Программист указывает что, и как относительно других элементов, должно быть выведено на экран (все это немедленно отображается на экране Canvas как будет выглядеть в реальной программе), а кроме того, инженеры Apple добавили в эту и без того впечатляющую картину сотни сумасшедших, но очень полезных и удобных, трюков. Результат магический – с нетерпением жду когда все это будет воплощено в окончательном варианте (через год или два).

 
Авторизуйтесь Чтобы оставить комментарий