SwiftUI入门推荐

SwiftUI推出至今有两年多了,虽然当下在企业项目里还未能广泛普及(要求iOS 13+),但是不影响自己学习新的技术和思想。SwiftUI的发布是令人兴奋的,声明式和响应式的编程风格早已不是新的概念,但是如今被苹果集成到系统还是很惊喜,而且Xcode 14.2里所见即所得的调试方式也让学习过程更加舒适。这里记录一些我个人的学习感受和推荐资源。

斯坦福iOS开发课程cs193p

我最开始学的是cs193p的2021年春季课程(B站里有),大概从iOS 6开始就有cs193p的这门斯坦福公开课,由教授Paul Hegarty授课。这门课对新手来说还是有一定要求的,如果英文不好的话,即使看翻译也可能会觉得吃力,不过换个角度来看,学习该课的过程也可以当作提升英语的途径,感受一流大学的授课氛围。话说SwiftUI方面,关于一些基础知识(比如Swift语言特性)都是在讲义中简单提几句,更多是要求学生自己看文档学习。课程本身的优势在于可以跟着老爷子现场写代码,而且代码的讲解是融合了很多细节知识点的。内容方面偏重于iOS本身的知识点,比如除了SwiftUI只,还有像动画、多线程、数据持久化、手势交互、DragDrop之类的知识点也有介绍,而Combine框架知识有简单提及,但不是重点。

这门课给我的印象是,课程demo有趣但不实用,比如课里的首个演示项目就是卡片游戏。我在App编程课程上像Paul老爷子那样过去用UIKit和现在用SwiftUI框架来编写游戏的情况应该不多见吧。从奔着实用性的目的来说,如果我期待自己在上完课后就能用新技术写app的话,感觉很多内容都有些多余,但也许这就是一流大学课程的精髓:有趣且挑战的项目,开拓学生的思维。另外几个技术点也让我印象深刻,比如SwiftUI是如何做到分配空间的?关于动画的两个黄金法则,以及在第7集最后老爷子通过这两个法则来排查只有一张卡片动画,但另一张没有动画的bug,这种教授级的思维推理非常值得看一下。

架构方面,老爷子用MVVM思想贯穿了整个课程,所以课程初期,老爷子对Model和ViewModel的划分还是很严谨的,这样的结构设计才能让数据流向变得清晰明了。我个人觉得MVVM对于SwiftUI就像是MVC对于UIKit一样重要,灵活且敏捷,所以学习MVVM的思想和数据流向才是重点。

SwiftUI与Combine编程

这是喵神在objccn上架的一本书,详细介绍了SwiftUI和Combine的技术和概念,对于新手来说,我觉得非常实用,因为作者通过“宝可梦”的项目把SwiftUI带入了实际app的开发体验中,在跟着写完书里的示例和练习以后,对入坑实战项目就比较自信了。除了SwiftUI,书里有很多篇幅专门介绍了响应式的概念和Combine的使用,这对于工作中经常写指令式开发的程序员(比如我)来说确实是上手的福音,而且我之前也很少接触RxSwift(仅了解概念),这次顺便就借助作者对Combine的讲解而入坑了响应式编程。

不过在架构上,作者把前端的Redux模式拿来做SwiftUI的开发,而是否在实际项目中采用Redux的观点,我目前保持中立态度。Redux的优势在于通过保持单向数据流的方式来更新数据源和刷新UI,这样单一的数据流向在复杂的app中会更加统一和便于维护,不过实现起来相对繁琐,除了需要为每种状态变更而定义Action以外,还需要考虑副作用的情况,然后又引进一些Command来发送额外的Action(比如网络请求开始时发送一个action用来变更状态,通知UI出现loading动画,然后再由Command实现网络请求调用,结束后发送另一个action用来通知UI完成了请求),这些都是为了保持Redux严谨的特性而兼容纯函数和副作用的情况。另外如果在项目中使用Redux的话,我觉得还需要考虑团队其他成员维护的情况,比如其他人是否愿意接受、学习以及严格执行Redux的流程。

记得前阵子在看objcio的《App架构》的时候,发现在MVC的示例代码中也通过发送通知的方式做到了单向数据流,这就说明了单向数据流的实现也并非只能依靠Redux,不过Redux倒是提供了一整套流程来约束和规范开发行为。我个人的观点是,在适应产品快速迭代、易上手、团队协作方面,可能我会更加倾向于MVVM;但如果是为了解决数据流向复杂和过于耦合的代码问题,我可以考虑采用Redux或者其他架构来做针对性的代码重构。这本书提供了一个不错且入门的Redux案例可以拿来体验,确实很值得学习。

总结

如果想要入门且系统学习SwiftUI的话,除了苹果网站里的入门课,我非常推荐上面两个资源。如果时间精力有限,也可以阅读这本书里关于“宝可梦”的项目开发部分,以及观看cs193p里关于MVVM的部分。如果时间精力充足,对于实用派来说,看喵神的书就可以了,对于不追求实用但喜欢挑战的人,可以尝试看完cs193p。不论走哪条路,上手演练都很重要,跟着示例写代码,完成练习和作业,都是学习技术的必要环节。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值