Flutter vs. Swift的iOS开发

3,881 阅读9分钟

在本教程中,我们将比较Flutter和Swift,前者是用于构建UI的跨平台开源工具包,后者是用于构建iOS和macOS应用程序的主要语言。我们将从功能、易用性、构建iOS应用的开发者体验等方面回顾每种编程语言的基本情况。我们还将提供一些指导,以帮助你选择学习或使用哪种语言来完成特定的iOS应用开发项目。

Swift vs. Flutter。高层概述

Swift是一种开源的、通用的编程语言,由苹果公司为iOS、macOS、watchOS和tvOS应用开发构建。它是一种现代的、快速的、安全的、互动的语言,对初学者来说很容易上手。

例如,要向控制台输出(打印)一条信息,你只需使用print() 方法。

print("Hello World!")
// outputs the characters "Hello World!"

然后是Flutter,谷歌的开源UI工具包,用于从单一代码库中构建跨平台的原生用户界面。Flutter现在支持开发也能在网络和桌面上运行的应用程序。

Flutter框架是用Dart构建的。要在Flutter中构建应用程序,您必须具备一些Dart编程语言的知识。

Dart是一种客户端优化的语言,用于在任何平台上开发应用程序。它简洁、强类型、面向对象,并支持健全的空安全。

为iOS开发设置你的系统

在你开始构建一个iOS应用之前,最初的设置包括添加基本的工具,如系统和IDE,以启动和运行。让我们来看看如何使用Flutter和本地(Swift)工具为iOS开发设置系统。

要使用Flutter构建一个iOS应用程序,第一步是下载安装包并将文件解压到所需的位置。接下来,安装Xcode。然后您可以使用您选择的任何IDE来构建您的Flutter iOS应用。

要设置使用Swift原生构建iOS应用的系统,你所需要的只是一台MacOS和Xcode。这使得在Swift中建立一个iOS开发环境比在Flutter中更容易一些。

使用 Flutter 和 Swift 构建 iOS 应用程序

现在我们已经设置好了,是时候动手了,开始用Flutter和Swift iOS为一个新项目构建启动文件。

Flutter演示应用程序

通过在您想放置项目的目录下运行以下命令行,创建一个新的Flutter iOS应用程序。

flutter create demo_flutter_app
// this creates a new called demo_flutter_app, containing the Flutter's starter app.
cd demo_flutter_app
// enter the demo_flutter_app directory
flutter run
// to launch the app in a simulator

对于我的演示,我使用了Android Studio IDE。你可以像这样使用Android Studio IDE启动一个新的iOS Flutter项目。

文件新建Flutter项目,然后选择Flutter应用程序,输入项目名称,然后创建项目。

Flutter将创建一个Flutter启动程序,如下图所示。

Flutter Starter App

原生(Swift)iOS演示应用程序

要使用Xcode开始一个新的iOS项目,点击创建一个新的Xcode项目,然后选择App,然后输入项目名称。点击下一步,在你选择的目录中创建一个项目。

Xcode将创建一个iOS Starter App,在模拟器中运行时显示 "Hello World",如下图所示。

iOS Starter App

现在我们已经用Flutter和Swift建立了基本的iOS应用实例,让我们比较一下两者的学习曲线、开发时间、UI创建过程以及与之相关的整体开发者体验。

学习曲线

与Flutter不同的是,一旦你在Xcode中创建了一个项目,Swift的iOS入门应用程序就很轻,很容易上手。这是因为你只需要适应Swift编程语言,而Flutter需要了解如何用Dart编写。

更重要的是,苹果公司将Swift设计为 "任何人的第一种编程语言"。你也可以利用SwiftUI来构建iOS应用程序。

Swift的iOS应用的主要入口是Content.swift ;对于Flutter来说,是lib目录下的main.dart

Flutter有大量的文档,这是你开始用该工具包构建iOS应用所真正需要的。谷歌Flutter codelabs是另一个很好的资源,可以让你亲手操作Flutter。

尽管有这些学习资源,但在你用Flutter构建任何类型的应用程序之前,你需要学习Dart编程语言。幸运的是,有一个不断增长和支持的开发者社区一直在创造新的学习资源,以帮助新的Flutter开发者掌握Dart的方向。

与Flutter类似,苹果官方文档是开始学习使用Swift构建原生iOS应用程序的完美场所。文档还包括使用SwiftUI的说明和指南,这是一个为任何苹果平台构建用户界面的声明性框架。

说到学习曲线和平易近人,Swift比Flutter更有优势,因为如前所述,你不需要学习一种新的编程语言来构建原生iOS应用。

也就是说,由于其丰富的文档和社区支持,Flutter和Swift都是相对容易学习的。

开发时间

在本节中,我们将评估与Swift相比,使用Flutter开发一个相当标准的iOS应用程序所需的时间。我们将在分析中考虑调试和测试等事项。当然,交付一个应用程序所需的时间也取决于项目的复杂性、开发者的技能水平和工作风格等。

Dart支持即时编译和超前编译,这就是为什么Flutter支持有状态的热重载--当应用程序仍在运行时,对代码进行修改,即时更新UI。这无形中导致了开发者的高速度。

有了Flutter的单一代码库(Android和iOS),团队可以按时发布跨平台的应用程序,减少了在不同平台上开发应用程序的成本,加快了发布MVP的时间。

尽管Swift是iOS应用开发的原生语言,但当对应用进行修改时,你需要重新加载应用才能看到这些修改。

由于热重载,Flutter应用的重载速度更快,在开发者速度和交付iOS应用开发项目的时间方面,它比Swift更有优势。

用户界面(UI)创建

接下来我们将研究使用Flutter和Swift为iOS应用创建用户界面的过程。我们将通过使用Swift和Flutter构建一个简单的应用程序来展示与之相关的过程,从而结束比较。

使用Flutter为iOS构建用户界面

Flutter应用开发的核心是widget。小组件是对用户界面的一部分的描述。

Flutter带有可定制的小工具,如 [Text() widget](https://flutter.dev/docs/development/ui/widgets/text),你可以用它来创建UI。小部件也有属性,如背景、宽度、高度等。有两种类型的小部件:有状态和无状态。

有了widget,您不需要费力地从头开始创建UI。您可以简单地利用Flutter提供的可定制的小部件。

下面是一个使用Flutter编写Hello World程序的例子。

import 'package:flutter/material.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Hello World Demo',
home: Scaffold(
appBar: AppBar(
title: Text('Hi there'),
),
body: Center(
child: Text('Hello World'),
),
),
),
}
}

用iOS版的Swift构建一个UI

通过SwiftUI,您可以为所有苹果平台创建UI。SwiftUI采用声明式语法方法,易于阅读和自然编写。

下面是一个使用SwiftUI编写Hello World程序的例子。

import SwiftUI

struct ContentView: View{
var body: some View{
Text("Hello World!")
}
}

最后,使用Flutter和Swift都可以为iOS应用程序创建漂亮而有吸引力的UI,而且两者都享有惊人的社区支持。也就是说,与Flutter相比,Swift因其代码的简洁性而脱颖而出。

将原生 iOS 应用程序移植到 Flutter

根据Flutter文档,有可能将Flutter添加到现有的iOS应用程序中。在本节中,我们将向您展示如何将一个原生 iOS 应用程序移植到 Flutter。

要将Flutter添加到iOS应用中,首先在项目的根目录下创建一个Flutter模块。

cd rootdir
flutter create --template module my_flutter

在终端运行上述命令会使Flutter自动运行flutter pub get ,它将Flutter的依赖关系添加到my_flutter/pubspec.yaml 文件中。

Flutter Module

注意,我在上面的演示中把flutter模块命名为my_flutter1

下面是通过文档显示的my_flutter 模块目录的结构。

my_flutter/
├── .ios/
│   ├── Runner.xcworkspace
│   └── Flutter/podhelper.rb
├── lib/
│   └── main.dart
├── test/
└── pubspec.yaml

注意,.ios/ 目录是一个隐藏的子文件夹。

下一步是将Flutter模块嵌入到iOS应用中。文档概述了将 Flutter 嵌入 iOS 应用程序的两种方法。

  1. 使用CocoaPods依赖性管理器和安装 Flutter SDK
  2. 为 Flutter 引擎、编译的 Dart 代码和Flutter 插件创建框架

推荐的方法是使用 CocoaPods 依赖关系管理器,所以我们将相应地进行。

假设您已经安装了Flutter SDK,请向应用程序添加一个Podfile。一个Podfile是描述一个或多个Xcode项目的目标依赖性的规范。

要创建一个Podfile,请打开终端和CD进入iOS项目目录。然后,在项目目录下运行$ pod init

使用编辑器打开Podfile(我推荐VS Code)并粘贴下面的代码。

flutter_application_path = '../my_flutter'
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')

在Podfile目标上,在doend 之间,添加以下内容以嵌入Flutter。

  install_all_flutter_pods(flutter_application_path)

接下来,在终端上运行$ pod install 。现在你的iOS应用已经嵌入了Flutter。

你现在可以在Xcode中使用构建和运行播放图标或命令+B来构建你的项目。但首先,退出Xcode,再次启动它,并打开项目的.xcworkspace

你的iOS现在已经被移植到Flutter,你可以开始构建了。

总结

在本指南中,我们比较了用于构建原生iOS的Swift编程语言和用于构建跨平台(特别是iOS)应用程序的UI工具包Flutter的相关开发者体验。

在我看来,选择用Flutter还是Swift来构建你的下一个iOS应用,取决于你对Dart和Swift编写的偏好和舒适程度。用Swift构建iOS应用的明显优势来自于本地Swift编程语言和苹果的SwiftUI框架。另一方面,用Flutter构建iOS应用,可以让你用一个代码库构建iOS和Android应用。关于用Flutter构建跨平台应用程序的更多信息,请查看 "Flutter应用程序开发的优点和缺点"。

最后,让我们总结一下我们对iOS开发的Flutter与Swift的比较中的几个关键启示。

  • 对于设置,如果你想使用Swift构建,你需要在你的mac上安装Flutter SDK和Xcode。对于Flutter,您需要安装Flutter SDK。
  • 与iOS的启动程序相比,Flutter的启动程序很重,您可以使用Xcode创建。
  • Flutter和Swift都有很好的文档,可供希望快速掌握其中一个平台的开发者使用。Flutter的文档也涉及到跨平台的应用开发。
  • SwiftUI建立在Model View ViewModel(MVVM)架构之上,而Flutter在其声明式架构中借鉴了React的一些内容。
  • 您可以通过在您的iOS应用的根目录下创建Flutter模块或使用CocoaPods将Flutter框架嵌入到应用中,将本地Swift应用移植到Flutter中。

The postFlutter vs. Swift for iOS developmentappeared first onLogRocket Blog.