Hello, World! Меня зовут Денис. Я IOS разработчик, пишу приложения для App Store. Хочу поделиться своим небольшим опытом на UIKit и SwiftUI.

Первый запуск

На WWDC19 Apple предоставила декларативный фреймворк SwiftUI. Новый фреймворк позволяет уменьшать время на написание UI-составляющей своих приложений.

Пробежимся по

  • UIKit

  • SwiftUI

  • Отличия между фреймворками

  • Возможно использовать UIKit в SwiftUI?

  • Производительность

Что такое фреймворк UIKit?

UIKit - это фреймворк, позволяющий создавать пользовательские интерфейсы (UI), которые могут обрабатывать события касания и входные данные, управляя взаимодействиями между пользователем, системой и вашим приложением. UIKit разработан и выпущен на основе языка Objective-C.

UIKit можно создавать несколькими способами

  • Использовать конструктор интерфейса. Interface Builder интегрирован в Xcode и позволяет редактировать .storyboard.xib

  • Подход, ориентированный на код, при котором представления и ограничения компоновки определяются в Swift

Плюсы/минусы

+ Привычен и стабилен

+ Свобода действий над UI элементами

- Сложные UI элементы

 Что такое фреймворк SwiftUI?

SwiftUI - фреймворк, который позволяет вам проектировать и разрабатывать пользовательские интерфейсы декларативно, с меньшим количеством кода. Был впервые выпущен в 2019 году с версией 13 iOS SDK.

Создание

  • Xcode отображает визуальный редактор с любым файлом, содержащим представление SwiftUI, отображая живое представление создаваемого вами представления.

Плюсы/минусы

+ Прост в освоении

+ Можно смешивать с UIKit через UIHostingController

+ SwiftUI больше не нуждается в Interface Builder, был заменен на Canvas

+ HStack(элементы расположены горизонтально), VStack(элементы расположены вертикально), ZStack(элементы расположены друг над другом) - StackView

+ Абсолютная свобода и гибкость

- Еще молодой фреймворк

- Он поддерживает только iOS 13 и Xcode 11

Отличия между фреймворками

1) Чтобы код работал, вам просто нужно описать переменную body (var body: some View{}), к которой вы должны вернуть представление. Тело - ваш контейнер, в который вы добавляете все остальные вложенные представления. В теле вы должны возвращать только один элемент: текст, изображение, кнопку... — все, что поддерживает View. В другом случае компилятор выдаст ошибку

2) Основные вещи, такие как UIScrollView и UITableView также доступны, но теперь они называются ScrollView и ListView

3) Создание пользовательского интерфейса программно (без раскадровки) в UIKit значительно сложнее по сравнению с SwiftUI. UIKit известен как императивный фреймворк, который просто означает, что вы указываете, как что-то сделать

4) SwiftUI является декларативной структурой. Вы объявляете код, а на canvas происходит ваши задумки (как я называю "прямой эфир")

Возможно использовать UIKit в SwiftUI?

UIViewRepresentable - это протокол, предоставляемый фреймворком SwiftUI. Используя этот протокол, можно обернуть экземпляр представления UIKit, чтобы его можно было отображать с помощью SwiftUI. Пример:

Производительность

С точки зрения времени разработки SwiftUI обычно работает лучше, чем UIKit. Связано с тем, что иерархия представлений находится в структурах типа значений, хранящихся в стеке, что означает отсутствие дорогостоящего выделения памяти. Означает более высокую производительность в некоторых ситуациях

Итог

Подводя итог, SwiftUI использует совершенно иной подход к написанию кода, чем UIKit. Выбор за вами. Факт: SwiftUI понятен, легко читается и удобен в использовании. В будущем Apple начнет отказываться от UIKit.

Новое поколение iOS-разработчиков все чаще начинают свой путь именно со SwiftUI, а бывшие дизайнеры, благодаря данной технологии Apple, становятся еще и разработчиками.

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

P.S. На рынке РФ пока мало компаний, которые перешли с UIKit на SUI.

Комментарии (7)


  1. lymes
    15.01.2023 15:08
    +1

    У него есть архитектуры MVC/MVVM/ MVP

    Ясно-понятно. Спасибо.


    1. Den_1Ro Автор
      15.01.2023 15:41

      Готов к критике????


      1. lymes
        15.01.2023 16:44
        +1

        Пожалуйста. Увидев заголовок, мне стало любопытно, что же все-таки лучше, а главное для кого или чего. Но, к моему сожалению, ответа на такой философский вопрос в статье нет, зато есть какая-то коротенькая (за это отдельное спасибо) белиберда из слов, сложенных человеком, который где-то что-то слышал, но предметом явно не владеет.


  1. mSnus
    15.01.2023 16:06
    +1

    SwiftUI - поддержка собственной иерархии представлений, а затем платформа заботиться/обновляет данные на экране (canvas)

    UIkit - поддерживает собственное состояние, код - синхронизацию этого состояния

    Вы сами понимаете, что здесь написано? Простите.


    1. Den_1Ro Автор
      15.01.2023 21:34

      Извиняться не надо. Вы написали правильно! Исправил ????


  1. 666bsw
    17.01.2023 10:52

    Добрый день!
    есть небольшие поправки) от себя и вообще..
    - "Apple предоставила декоративный фреймворк SwiftUI", представила декларативный фреймворк, а не декоративный !
    это одно из основных отличий от императивного UIKit - несущее массу преимуществ и отличий недостаточно раскрытых в статье.
    -UIKit - "Свобода действий над UI элементами" , я бы тогда добавил SwiftUI - абсолютная свобода и гибкость)
    -кто то еще использует Interface Builder?


    1. Den_1Ro Автор
      17.01.2023 11:25

      Хорошо, исправлю????