Разработка мобильных приложений

Флаттер против. SwiftUI

Узнайте о фундаментальных различиях между Flutter и SwiftUI

Последние восемь месяцев я использую SwiftUI для разработки собственного приложения для iOS. До этого я использовал Flutter для создания нескольких проектов. Итак, в этом обсуждении я хочу поделиться с вами своим мнением о Flutter и SwiftUI.

Отказ от ответственности:
Я занимаюсь разработкой родных приложений для iOS с 2010 года и собственных приложений для Android с 2014 года. Я изо всех сил старался написать эту статью, основываясь на фактах, а не на предвзятости. В конце концов, вам решать, что вы хотите изучить или использовать.

1. Основы

Flutter и SwiftUI являются декларативными фреймворками пользовательского интерфейса. Таким образом, вы можете создавать составляемые компоненты, которые:

  1. Во Flutter называется виджеты, а
  2. В SwiftUI вызывается просмотры

2. Виджеты и представления

Во Flutter, если мы хотим отображать виджеты по вертикали и горизонтали, мы можем использовать Column и Row виджеты.

Также есть виджет Container, который содержит другие виджеты. Row, Column, и Container - это виджеты макета. Это означает, что если внутри нет никаких виджетов, ничего не будет отображаться.

Точно так же в SwiftUI мы можем использовать представления макета VStack и HStack с той же целью, чтобы отображать виды по вертикали и горизонтали. Мы можем использовать ZStack его как контейнер. В основном ZStack используется для наложения видов друг на друга. Все эти представления называются представлениями макета, аналогично виджетам макета Flutter.

3. Виджеты, представления и модификаторы

Во Flutter все является виджетом. Итак, предположим, если вы хотите создать виджет Text и хотите добавить несколько стилей к этому тексту; вам нужно использовать другой виджет, который называется TextStyle, и вам нужно назначить этот виджет с параметром виджета Text.

Итак, на следующем рисунке вы увидите первый виджет Text внутри стиля, вы увидите еще один виджет TextStyle, который задает стиль текста.

Но в SwiftUI не все View. Есть две концепции:

  1. Просмотры
  2. Модификаторы

Таким образом, вы можете создать представление, подобное Text представлению, и, если вы хотите применить некоторые стили, такие как шрифты, цвета, вы должны использовать для этого модификаторы.

Итак, в SwiftUI модификаторы - это методы, которые принимают представление, изменяют представление и возвращают новый объект представления.

В следующем коде вы увидите Image как объект представления, а .resizable() и другие методы, вызываемые с использованием нотации с точкой (.), Являются модификаторами.

4. Местное государство

Во Flutter есть два типа виджетов:

  1. Виджет без сохранения состояния
  2. Виджет с отслеживанием состояния

Если вы хотите сохранить локальное состояние, вы должны использовать виджет с отслеживанием состояния. Здесь вы увидите, что локальное состояние _counter объявлено в виджете с отслеживанием состояния с именем MyHomePage. Обычно виджет MyHomePage создает другой объект с именем _MyHomePageState и сохраняет в нем ссылку.

Но в SwiftUI такой разницы нет.

Вы можете добавить локальное состояние к любым представлениям в SwiftUI.

Даже вы можете привязать это состояние к подпредставлениям. Это означает, что любые вложенные представления могут изменять состояние представления родителя, если оно имеет привязку.

В SwiftUI для объявления локального состояния используется ключевое слово @State, которое технически называется оболочкой свойств. И чтобы связать его с подпредставлением, мы должны использовать @Binding оболочку свойств.

5. Глобальное состояние

Глобальное состояние или состояние приложения означает состояние, к которому можно получить доступ из любого представления.

Во Flutter есть разные варианты. Вы можете использовать Provider, Redux, BloC. Это сторонние библиотеки. Это означает, что вам необходимо установить любую из этих библиотек, прежде чем вы захотите их использовать. .

Но в SwiftUI вы можете создать состояние приложения или глобальное состояние приложения, используя встроенные библиотеки. Вы можете создать EnvironmentObject и назначить это в главном представлении, чтобы любое дочернее представление главного представления могло получить доступ к этому состоянию.

Или, если вы хотите создать внешнее состояние, которое хотите использовать в нескольких представлениях, вы можете сделать это, создав и используя ObservableObject. Так что это встроенные опции. Для этого не нужно устанавливать какие-либо сторонние библиотеки.

6. Доставка новых функций

В этом случае Flutter имеет некоторые преимущества перед SwiftUI. SwiftUI был впервые выпущен для iOS 13 и технически называется SwiftUI версии 1.0. Теперь, когда вышла iOS 14, мы также получаем новый SwiftUI версии 2.0. Проблема в:

Мы не можем использовать функции SwiftUI 2.0 в iOS 13, минимальное требование - iOS 14.

Итак, нам нужно написать условный код для iOS 13.0 и iOS 14.0 следующим образом:

Преимущество Flutter в том, что библиотека Flutter входит в состав нашего приложения. Таким образом, мы можем использовать все новейшие функции Flutter в нашем приложении. Пользователю не требуется обновлять iOS.

7. Размер приложения

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

Я обнаружил, что размер приложения увеличивается на 35 МБ, если мы использовали Flutter для создания приложения для iOS.

Итак, это фундаментальные сходства и различия между Flutter и SwiftUI. Поскольку оба являются декларативными фреймворками, если вы знаете одну, вы можете легко изучить другую.

Что мне следует изучить?

Да, это частый вопрос, который задают люди. На этот вопрос нет однозначного ответа. Если вы запутались, изучите следующие три критерия:

1. Карьера / работа
2. Личные предпочтения / интуиция
3. Требования к проекту / важные вещи

Если проект ориентирован в основном на пользователей iOS или пользователей экосистемы Apple, включая Mac, Apple Watch, iPad, Apple TV. Я выберу SwiftUI, чтобы создать приложение.

Если значительная часть приложения зависит от сторонних платформ, таких как Facebook и Amazon, которые предоставляют собственный SDK, я выберу SwiftUI. для создания моего приложения. Поскольку я не вижу, чтобы эти компании поддерживали Flutter.

Если я хочу работать в больших компаниях, я выберу SwiftUI или собственную разработку для iOS. Потому что крупные компании не захотят зависеть от другой компании, такой как Google, в разработке своих приложений.

Apple регулярно обновляет свой SDK, добавляя новые исправления ошибок и дополнительные функции, поэтому обновить собственное приложение iOS стало легко.

Но если вы используете Flutter, вам придется подождать, пока Google реализует те новые функции, которые предоставляет Apple.

Я выберу Flutter, если хочу разрабатывать в основном REST API или мобильные приложения на основе сервисов и для моей целевой аудитории, включая пользователей iOS и Android.

А некоторые компании, если у них небольшой бюджет на свои мобильные приложения, могут нанять меня в качестве разработчика Flutter.

Вы можете изучить и то, и другое, и вы можете применить некоторые общие шаблоны для решения общих проблем с использованием обеих сред.

Если вы работаете или собираетесь работать в компании, где меньше шансов использовать другую, не теряйте время зря.

Если вы работаете в основном в стартапе или небольшой компании, полезно знать несколько вещей. Чтобы, когда придут времена, вы могли быть наиболее продуктивными.

Единственное препятствие - это то, что вы должны хорошо владеть языками программирования Swift и Dart. Поскольку эти два языка являются строго типизированными, это тоже не большая проблема.

В большинстве случаев разработчику приходится работать на нескольких языках программирования.

И последнее, но не менее важное: вы можете посмотреть это репозиторий, где я разместил некоторые из моих руководств по флаттеру и проекты по флаттеру с открытым исходным кодом.