阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

SwiftUI 对 Flutter 到底意味着什么?

  • 2019-09-12
  • 本文字数:2328 字

    阅读完需:约 8 分钟

SwiftUI对Flutter到底意味着什么?

Flutter 使人们可以使用与 SwiftUI 相同的声明式 UI 技术,并且开发的代码可以在更多的平台上运行,这些平台包括 Android、Windows、Web 和 IOT 等​



太长不看版:SwiftUI 可能会给 Flutter 的发展带来好处,因为苹果平台的开发人员会发现 Flutter 让他们可以使用与 SwiftUI 相同的声明式 UI 技术,但使用前者开发的代码可以在更多平台上运行,支持的平台包括 Android、Windows、Web 和 IOT 等。


本文最初发布于Very Good Ventures博客


在 6 月 3 日的WWDC 19开发大会上苹果有很多重大发布,其中有一条不太引人注目却比较重要的新闻就是新发布的SwiftUI;这是一个用于构建 iOS(和 iPadOS/macOS/watchOS/tvOS)应用程序的新的声明式UI框架。当然,对于软件开发人员来说这条新闻可能是最激动人心的了。毕竟能有几个人买得起新的Mac Pro工作站呢?


最让开发人员兴奋的是,苹果终于跟上了时代步伐,迈入了声明式 UI 编程的世界。之前 React Native 和 Flutter 等产品成功通过热重载大幅简化了代码并缩短了开发时间,彼时苹果平台的开发人员却只能羡慕地旁观。谷歌在自家的 I/O 19 大会上宣布Jetpack Compose这一全新的 Android 平台声明式 UI 框架时苹果开发者也只能叹一口气。因此当苹果公司宣布 SwiftUI 时,观众的掌声和欢呼声自然是可以预料的。


我们正在见证一场由 React 掀起的声明式 UI 编程革命。这要感谢 Facebook!他们的努力值得所有人认可并报以掌声。在这一浪潮中 Flutter 的贡献也值得表扬。Flutter 是Github上十大星数最多的仓库之一,最近还在 2019 年 Stack Overflow 开发者调查中被评为第三大最受欢迎的框架,并且是领英上软件工程师职业中掌握人数增长最快的技能。我自己本来是一名经验丰富的原生 iOS 开发者,却在两年前投入了 Flutter 的怀抱再也没有回头,所以 Flutter 社区的成功与我的利益息息相关。那么我们应该如何看待 SwiftUI 的发布呢?

首先,所谓声明式 UI 编程到底是什么东西?

有些读者可能刚刚接触这方面的话题,所以我想简要介绍一下所谓声明式 UI 编程到底是什么意思。事实证明编写 UI 代码可以说是所有现代应用程序中最复杂的一项工作。今天的移动/桌面/Web 应用程序必须具备足够的响应速度、能妥善处理设备的握持方向选择、支持动态字体大小缩放、拥有亮/暗模式、提供多种主题选择、支持用户自定义、支持基于角色的权限机制、带有功能标记,还要做 A/B 测试。最后还得在这一大堆东西上面加上一坨动画。哦对了,所有这一切都得做得赏心悦目,至于完工期限嘛就定在昨天吧!


在声明式 UI 编程技术诞生之前,你通常会用下面这些方式来编写代码:处理登录按钮;显示一个表示处理中的转圈动画;调用后端;隐藏转圈动画;重定向到主屏幕;失败时显示弹出窗口。在这种“命令式”范例中,你可以直接更改 UI 的各个部分以响应各种事件。看起来很简单,但随着应用程序变得越来越复杂,更新 UI 时很容易就会造成意外的故障。所有事情很快就变得非常复杂。开发者很难掌握各种事件之间的具体关系,也很难预见并处理边缘情况。这就是为什么有时你会看到一些应用的用户界面长得莫名其妙,内容自相矛盾。那是开发人员没能预料到的一系列状况混杂在一起的结果。



命令式 UI 编程出错时就会变成类似这个样子。


相比之下,在“声明式”的范例中用户界面被“声明”为表示它的一些数据的函数。这些数据被称为状态。随着这些状态发生变化,UI 会自动更新。所以还是拿上面提到的这个例子来说:如果用户还没有登录,那就显示登录界面;如果用户已经登录就显示用户主页;如果网络繁忙则显示旋转等待动画;如果失败则显示错误。与命令式方法的不同之处在于,所有不同的状态都在一个地方统一处理,这样就能防止意外或不一致的结果。声明式范例往往有很多好处:


  • 大大降低了复杂性。

  • 需要的代码更少。

  • 提高了代码质量。

  • 缩短开发时间。


难怪开发人员会这么喜欢它。因此苹果加入这一流派是一件大事,为整个苹果开发社区打开了声明式范例的大门。

这对 Flutter 来说意味着什么?

我热爱 Flutter。它继承了 React Native 的衣钵并进一步发扬光大。Flutter 拥有出色的原生性能、不依赖原生平台 UI 组件,还支持 iOS、Android、Mac、Windows、IOT 和 Web 等众多平台,因此我确信它是现代应用程序开发的最佳选择。它还成功吸引了大批初学者和经验丰富的原生移动开发人员,取得了令人瞩目的成绩。我真心希望它能大获成功。


短期看来,SwiftUI 可能会打消一些专注于苹果平台的开发人员改用 Flutter 的念头。开发人员将在 SwiftUI 身上能够获得许多 Flutter 具有的优势,包括声明式 UI 架构以及热重载等;这也将减轻 Swift 著名的编译速度缓慢缺陷带来的痛苦。但是,由于 SwiftUI 仅适用于 iOS 13 及更高版本,因此应用程序在未来几年还需要继续使用老旧的命令式风格,然后才能逐渐完全过渡到新的框架上。这意味着开发人员可能需要长时间维护两个完全独立的 UI 代码库!


若改用 Flutter,苹果平台的开发人员会发现他们可以用上自己已经熟练的声明式 UI 技术,并可以在更多平台上运行他们的代码。


从长远来看,我认为 Flutter 最终会从 SwiftUI 中受益。显然,专注于苹果平台的开发人员会面临越来越多的压力,催促他们将应用程序移植到 Android、Windows 和 Web 等其他平台上。若改用 Flutter,苹果平台的开发人员会发现他们可以用上自己已经熟练的声明式 UI 技术,并可以在更多平台上运行他们的代码。到这一步时 Flutter 会向他们热情地张开双臂。是不是已经开始感兴趣了?请联系我们



Very Good Ventures 是全球首屈一指的 Flutter 技术工作室。我们在 2017 年开发了第一款 Flutter 应用程序,并且从那时起就一直处于最前沿地带。


英文原文:


https://medium.com/flutter-nyc/what-swiftui-means-for-flutter-6d5898f7adf7


2019-09-12 11:564296

评论

发布
暂无评论
发现更多内容

SaaS 的多版本销售该如何设计

产品海豚湾

产品经理 产品设计 SaaS B端产品 9月月更

Java中的Request和Response详解

共饮一杯无

Request 9月月更 Response 请求与响应

2022 IDC中国未来企业大奖颁布,华为云数据库助力德邦快递获奖

华为云开发者联盟

数据库 后端 华为云 物流 企业号九月金秋榜

精通高并发与内核 | Linux内核与C/Java进程与线程深度解析

小明Java问道之路

并发编程 线程 进程 Linux内核 9月月更

精通高并发与内核 | Linux内核进程的切换方式

小明Java问道之路

进程 Linux内核 进程管理 9月月更 进程切换

项目进度delay怎么办

Ian哥

项目管理 项目进度 项目计划

Java进阶(二十六)公司项目开发知识点回顾

No Silver Bullet

Java 9月月更

String,StringBuilder,StringBuffer区别,竟有这么多不同

知识浅谈

string string buffer 9月月更

Qt|QGraphicsView总体架构学习

中国好公民st

c++ qt 9月月更

案例拆解:重要节日客情维护的礼品卡券应用

boshi

运营 礼品

本地部署 VS 云服务

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

Elasticsearch聚合学习之五:排序结果不准的问题分析

程序员欣宸

elasticsearch 9月月更

户外服装品牌TheNorthFace遭遇撞库 撞库究竟如何成功窃取账户信息

郑州埃文科技

撞库 拖库 洗库

高性能 Java 计算服务的性能调优实战

vivo互联网技术

Java 缓存 性能 JVM 内存

【字符串函数内功修炼】strcpy + strcat + strcmp(一)

Albert Edison

C语言 9月月更 strcpy strcat strcmp

性能测试知识科普(一):核心术语

老张

性能测试

三分钟了解什么是时序数据库

阿泽🧸

时序数据库 9月月更

【云原生 | 从零开始学Docker】八丶Docker网络与部署redis集群

泡泡

Docker 云原生 9月月更

终于大橘已定,分享一波测开面经(美团、小米、华为、阿里等)

Java-fenn

Java 程序员 java面试 Java学习 Java面试题

怎么开Scrum五大会议?

敏捷开发

项目管理 Scrum 敏捷

22个常用的js单行代码

大师兄

JavaScript 前端面试 9月月更

【云原生 | 从零开始学Docker】九丶完结篇 Docker Compose

泡泡

容器 云原生 Docker 镜像 9月月更

数据科学公司Anaconda最新调研报告:40%因安全顾虑将减少开源软件使用

雨果

数据科学 开源软件

最被夸大的6项技术

雨果

新技术

Flomesh Ingress 的 SSL 透传

Flomesh

大数据调度平台Airflow(二):Airflow架构及原理

Lansonli

airflow 9月月更

2022-09-18:以下go语言代码输出什么?A:1;B:15;C:panic index out of range;D:doesn’t compile。 package main import

福大大架构师每日一题

golang 福大大 选择题

FeatureStore meetup V4回顾|腾讯 & 微软 & 第四范式特征平台技术解析与应用实践

星策开源社区

机器学习 微软 特征平台 MLOps FeatureStore

[极致用户体验] 为什么建议2022年不用"等比设计稿"+rem,而用"灵活设计稿"+px

HullQin

CSS JavaScript html 前端 9月月更

AOP实现系统告警

Java aop spring aop 告警系统

又创新作!阿里SpringBoot高阶手册爆火,简直不要太香!

收到请回复

Java 云计算 开源 架构 编程语言

SwiftUI对Flutter到底意味着什么?_语言 & 开发_Martin Rybak_InfoQ精选文章