Qunar SwiftUI 的实践、评测与思考

本文详细介绍了Qunar在SwiftUI上的实践,包括SwiftUI的代码库、渲染流程、生命周期、语言特点、数据状态和绑定,以及与其它声明式UI框架的比较。文章指出,SwiftUI提高了开发效率和运行效率,但其iOS13的最低适配限制和未广泛推广是挑战。作者还探讨了SwiftUI在Qunar大客户端落地的场景和Objective-C迁移SwiftUI的思考,强调Swift是Apple平台的未来趋势。
摘要由CSDN通过智能技术生成

赵龙,2020年加入Qunar,担任大前端iOS开发,OC、 SWIFT、
C++、Dart等技能丰富,喜欢优化开发流程,研究增加效率的代码和开发方式。


林书辉,2018年加入Qunar,iOS、RN开发工程师。目前负责大客户端公共产品首页、用户中心等功能的开发和维护。持续关注学习前沿的大前端技术,推崇技术创新带来的效率优化和性能提升。现致力于Native+DSL动态化组件方案的开发与推广。

一. 前言

SwiftUI 出现已经2年,至今尚未大规模推广落地,它局限在 iOS 生态内,暂时闭源的 UI 库,需要 iOS13 版本来适配,这些因素阻碍了更多人使用,但是其实它相对于其他UI框架具有非常高的开发效率与运行效率,相对于 Objective-C+UIKit 更是一个全面的框架升级。
写这篇文章是为了让大家熟悉 SwiftUI ,让客户端同学在技术选型的时候有切实的数据和特性来参考,也希望推进大客户端的 Swift 基础设施建设。

二. SwiftUI代码库

iOS 中 SwiftUI 由2个底层框架驱动 SwiftUI.framework 与 Combine.framework
其中 SwiftUI.framework 负责界面搭建,简洁的 DSL 相比 OC 让开发效率提升不少,例如我们要实现在屏幕中心实现一个带文本按钮, OC 中我们一般这样写:

- (void)viewDidLoad {
   
    CGRect screen = [[UIScreen mainScreen] bounds];
    UIButton * centerBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [centerBtn setFrame:CGRectMake(screen.size.width / 2 - 30, screen.size.height / 2 - 15, 60, 30)];
    [centerBtn setTitle:@"测试按钮" forState:UIControlStateNormal];
    [self.view addSubview:centerBtn];
 }

而在 SwiftUI 中我们这样写:

var body: some View {
   
    Button(){
   
       Text("测试按钮")
         .frame(width: 60, height: 30, alignment: .center)
    }
}

Combine.framework 负责生成数据流绑定操作与界面,基于观察者模式,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
只不过,这些框架对这个模式进行了一点扩充,在被观察者与观察者之间引入了可选的转换操作(操作符:Operators)。

三. 渲染流程

以我们去哪儿小组件一个页面左下角文本的渲染为例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值