Що таке SwiftUI і навіщо він потрібен

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

Що таке SwiftUI

Чуткам про те що Apple ось-ось, мало не днями, випустить абсолютно казковий 16,5-дюймовий MacBook Pro «без рамок навколо екрану», з якоюсь особливою клавіатурою, не схильною до «ефекту метелика», скоро виповниться рік. Цікаво, що станеться раніше - і які нові каверзи зустрінуться нам у цьому ноутбуці? А що це за «особлива клавіатура»? Ножиці, або щось знову щось своє, оригінальне і передове? І знову, в точності як рік тому, тайванські аналітики повідомляють про масове виробництво цих MBP, що стали легендарними ще до появи на світ, і відстежують поставки різних комплектуючих для них. Минулого разу, правда, виявилося що всі ці комплектуючі були для якогось іншого ноутбука - але розвідка і аналітика ризиковані професії. Чи існує це MacBook Pro взагалі? Я думаю ні. Якщо думаєте інакше, поділіться в нашому Telegram-чаті.


А ось про те, що в Apple працюють над новою «начинкою» операційних систем компанії, і дещо з цих розробок вже доступно стороннім розробникам в Xcode 11, і в цих шматочках майбутнього Apple вперше в своїй історії використовує старий добрий Swift інакше ніж раніше - ніхто наче не чув. Реактивне і декларативне програмування давно не новина, і використовуються в індустрії не один десяток років - але Apple, як у старі добрі часи, використовує їх інакше. Не здивуюся якщо через пару-іншу років саме «яблучне» втілення всього цього стане зразком для наслідування, поки ж нехай недоброзичливці і далі вмирають зі сміху, спостерігаючи за потугами «дами з причудами» культивувати у своєму скляному палаці «давні нововведення».

Не можна сказати що про 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 теж не без глюків, але їх небагато.

В результаті, користувальницькі інтерфейси програмісти iOS і iOS-подібних систем пишуть або за допомогою IB, або у вихідному коді. Як користувач IB з майже 20-річним стажем, стверджую: на жаль, SwiftUI дійсно «крутіше» ніж IB. Це адекватна заміна. Для малюючих інтерфейси у вихідних кодах SwiftUI ще крутіше, тому що зараз (в реальних програмах SwiftUI поки ще майже не використовується) для того, щоб розташувати на екрані елемент інтерфейсу, нехай це буде текстовий рядок, будь-який напис, програміст повинен:

  • створити об'єкт відповідного типу;
  • обчислити координати об "єкта на екрані;
  • розмістити об'єкт на екрані;
  • вказати значення об "єкта;
  • вказати атрибути тексту (це декілька рядків, як правило - шрифт, стиль, колір тощо)

Це один з найпростіших об'єктів - створення таблиці (списку) вручну може зайняти не одну сотню нетривіальних рядків. Вважається що в кожних ста рядках нового коду, як мінімум, повинні виявитися дві помилки, які не будуть виявлені при тестуванні і проявлять себе тільки потрапивши в руки користувача. При збільшенні числа рядків у N число помилок збільшується в N у квадраті разів. У цьому жарті є частка жарту. До речі, якщо ви не знаєте що таке імперативне програмування, ви тільки що побачили його «в обличчя».


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

COM_SPPAGEBUILDER_NO_ITEMS_FOUND