SwiftUI 是什么
SwiftUI 是苹果2019年 WWDC 推出的新 UI 开发框架,主要特点是声明式语法,数据绑定,响应式编程等。和谷歌的跨平台框架 Flutter 思想大同小异。
为什么选择 SwiftUI
SwiftUI 开发效率很高有预览功能,代码即写即所见。支持 Apple 生态平台,一套代码运行 Mac、iPad。
现有项目使用 SwiftUI
由于 SwiftUI 最低支持 iOS13 系统版本,如果你的项目符合,完全可以使用 SwiftUI 开发,目前 SwiftUI 一些 API 还不完善,缺少一些功能,还离不开 UIKit ,所以苹果提供了接口,可以在 SwiftUI 中使用 UIKit 来弥补目前 SwiftUI 的不足,所以我们完全不用担心。
目前有哪些坑
毕竟是新框架还在慢慢完善,API 不稳定,功能不完善,还有可能会出现一些莫名其妙难以定位的 Bug,需要慢慢填坑。
SwiftUI 学习成本
学习成本不算高,上手很快,如果你没有接触过 React、Flutter等跨平台开发框架,还是需要多学习些,主要是命令式到声明响应式编程思想的转变。
推荐的学习资料
由于最低版本限制,目前使用 SwiftUI 开发的很少,除了一些新项目,大部分主流 App 还没有接入 SwiftUI,普及还需要时间,这就导致了目前 SwiftUI 资料很少,网上能搜到的都是零零散散的,并不能很好系统的学习,需要自己花时间看官方文档和教程,官方 SwiftUI 的教程很完善,一定要跟着敲一下代码。另外我最推荐的就是看 19年 WWDC 和 20年 WWDC 关于 SwiftUI 的视频,有中文字幕,包含 UI,布局,动画,数据流,Combine 响应式框架等讲解,强烈推荐。我用一个星期把 WWDC 视频看完,已经可以上手开发了,目前我们有一个新项目正在使用 SwiftUI 开发。
另外推荐两个方便上手开发的框架,可以少走不少弯路
-
SwiftUIX
使用 SwiftUI 开发最头疼的就是之前使用的一些 UIKit 控件目前在 SwiftUI 中还没有,比如搜索框 UISearchBar,如果要使用就需要做一下桥接,这个框架帮我们把 SwiftUI 缺失的控件都桥接好了,可以在 SwiftUI 中直接使用 UIKit 的控件,非常方便。
struct ContentView: View {
@State var isEditing: Bool = false
@State var searchText: String = ""
var body: some View {
SearchBar("Search...", text: $searchText, isEditing: $isEditing)
.showsCancelButton(isEditing)
.onCancel { print("Canceled!") }
}
}
-
SwiftUI-Introspect
目前 SwiftUI 底层实现大部分是基于 UIKit 框架的,由于 SwiftUI 部分 API 不完善,我们很可能要用到 UIKit 的 API,这个框架允许你获取 SwiftUI 视图的底层 UIKit 或 AppKit 元素。
例如修改设置 List 的分割线,我们就可以拿到底层的 tableview 对象直接修改:
List {
Text("Item 1")
Text("Item 2")
}
.introspectTableView { tableView in
tableView.separatorStyle = .none
}