Airbnb 迁移 SwiftUI 实践

news/2024/7/20 20:08:08 标签: swiftui, ios, swift

从 2022 年开始,Airbnb 的 iOS 团队就认为 SwiftUI 已经足够成熟,可以在他们的官方应用中使用它。但 Airbnb 的工程师 Bryn Bodayle 表示,这需要一个谨慎的转换过程。

Airbnb 的工程师认为,SwiftUI 的主要优势是它的灵活性和可组合性、声明性、简洁性和惯用性,他们希望这些优势可以改进开发者体验,同时不会在用户体验方面有所损失。

为了尽可能实现无缝的过渡,他们制定了一个三阶段计划。在第一阶段,他们基于现有的设计系统构建一系列可重用的组件。在第二阶段,他们对基本组件进行组合,构建出整个屏幕。在第三个也是最后一个阶段,屏幕将被组合成完整的功能。

在开始前两个阶段之前,Airbnb 的一群自愿者工程师先进行小型试点,并收集反馈,尽早改进他们的基础设施。

如上所述,第一步是基于一系列风格使用 SwiftUI 重建现有的设计系统,这些风格可以通过修饰符实例化并传给视图。这为开发人员使用几行代码轻松定制 UI 组件提供了基础。

第二步是构建基础设施,实现基于 UIKit 的 Epoxy 视图和 SwiftUI 视图之间的双向桥接。桥接的实现细节可以在原文中找到。简单地说,桥接是基于 UIHostingViewController(将 SwiftUI 层次结构嵌入到视图控制器)和 UIViewRepresentable(将 UIKit 视图集成到 SwiftUI 层次结构)。

Airbnb 工程师做出的另一个决定是将 Epoxy 的单向数据流应用到 SwiftUI,将 ObservableOject 作为状态类的基础,在每次状态变化时触发 SwiftUI 重新渲染。

我们发现,工程师们更喜欢继续使用这种方法来构建屏幕,因为这样可以


http://www.niftyadmin.cn/n/5099254.html

相关文章

MATLAB中sos2tf函数用法

目录 语法 说明 示例 二阶节系统的传递函数表示 sos2tf函数的功能是将数字滤波器的二阶节(section)数据转换为传递函数形式。 语法 [b,a] sos2tf(sos) [b,a] sos2tf(sos,g) 说明 [b, a] sos2tf(sos) 返回由 sos 描述的离散时间系统的传递函数系…

studio one6值不值得下载?好用吗

零基础学混音,持之以恒才能有所收获。首先要明确自己的学习目标,然后选择适合自己的教程。这套教程适用于后期制作和直播,同样适用。我切换到了桌面屏幕。 在这个基础上运行,它提供了适合零基础的模板,适合直播唱歌或…

vue介绍如何安装vueVue生命周期钩子MVVM

目录 1.vue介绍 1.1 什么是vue 1.2 vue的优点 2. 库和框架的区别 2.1 库 2.2 框架 3. MVVM 4. 安装vue 5.开发示例 5.1 vue实例 5.2 绑定事件 5.3 Vue双向数据绑定 6. Vue生命周期钩子 1.vue介绍 1.1 什么是vue vue是一个构建用户界面UI的渐进式javascript框架&…

c 语言基础:L1-043 阅览室

天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时…

LeetCode 1095. 山脉数组中查找目标值【数组,二分】1827

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

MySQL 8.0 OCP认证精讲视频、环境和题库之五 事务、缓存

redo log buffer: 缓存与事务有关的redo log ,用来对mysql进行crash恢复,不可禁用; 日志缓冲区是存储要写入磁盘上日志文件的数据的内存区域。日志缓冲区大小由innodb_Log_buffer_size变量定义。 默认大小为16MB。日志缓冲区的内容会定…

智慧公厕管理系统:科技赋能城市公共卫生服务的便利

在现代社会的城市化进程中,公共设施的管理变得越来越重要。而公厕作为城市公共设施的重要组成部分,也需要借助科技的力量进行管理和监控。智慧公厕管理系统应运而生,它为公厕管理人员提供了实时监控和数据统计分析的功能,大大提高…

请求转发和重定向区别

两者区别: 1.转发在一次请求中完成,重定向是两次请求 2.转发操作发生在服务器内部,重定向是在浏览器执行操作 3.转发地址栏不变,重定向地址栏变化(两次请求,两个地址) 4.转发可以在一次请求中共…