
SwiftUI 是什么
SwiftUI 是蘋果2019年 WWDC 推出的新 UI 開發(fā)框架,主要特點(diǎn)是聲明式語法,數(shù)據(jù)綁定,響應(yīng)式編程等。和谷歌的跨平臺(tái)框架 Flutter 思想大同小異。
為什么選擇 SwiftUI
SwiftUI 開發(fā)效率很高有預(yù)覽功能,代碼即寫即所見。支持 Apple 生態(tài)平臺(tái),一套代碼運(yùn)行 Mac、iPad。
現(xiàn)有項(xiàng)目使用 SwiftUI
由于 SwiftUI 最低支持 iOS13 系統(tǒng)版本,如果你的項(xiàng)目符合,完全可以使用 SwiftUI 開發(fā),目前 SwiftUI 一些 API 還不完善,缺少一些功能,還離不開 UIKit ,所以蘋果提供了接口,可以在 SwiftUI 中使用 UIKit 來彌補(bǔ)目前 SwiftUI 的不足,所以我們完全不用擔(dān)心。
目前有哪些坑
畢竟是新框架還在慢慢完善,API 不穩(wěn)定,功能不完善,還有可能會(huì)出現(xiàn)一些莫名其妙難以定位的 Bug,需要慢慢填坑。
SwiftUI 學(xué)習(xí)成本
學(xué)習(xí)成本不算高,上手很快,如果你沒有接觸過 React、Flutter等跨平臺(tái)開發(fā)框架,還是需要多學(xué)習(xí)些,主要是命令式到聲明響應(yīng)式編程思想的轉(zhuǎn)變。
推薦的學(xué)習(xí)資料
由于最低版本限制,目前使用 SwiftUI 開發(fā)的很少,除了一些新項(xiàng)目,大部分主流 App 還沒有接入 SwiftUI,普及還需要時(shí)間,這就導(dǎo)致了目前 SwiftUI 資料很少,網(wǎng)上能搜到的都是零零散散的,并不能很好系統(tǒng)的學(xué)習(xí),需要自己花時(shí)間看官方文檔和教程,官方 SwiftUI 的教程很完善,一定要跟著敲一下代碼。另外我最推薦的就是看 19年 WWDC 和 20年 WWDC 關(guān)于 SwiftUI 的視頻,有中文字幕,包含 UI,布局,動(dòng)畫,數(shù)據(jù)流,Combine 響應(yīng)式框架等講解,強(qiáng)烈推薦。我用一個(gè)星期把 WWDC 視頻看完,已經(jīng)可以上手開發(fā)了,目前我們有一個(gè)新項(xiàng)目正在使用 SwiftUI 開發(fā)。
另外推薦兩個(gè)方便上手開發(fā)的框架,可以少走不少彎路
-
SwiftUIX
使用 SwiftUI 開發(fā)最頭疼的就是之前使用的一些 UIKit 控件目前在 SwiftUI 中還沒有,比如搜索框 UISearchBar,如果要使用就需要做一下橋接,這個(gè)框架幫我們把 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 底層實(shí)現(xiàn)大部分是基于 UIKit 框架的,由于 SwiftUI 部分 API 不完善,我們很可能要用到 UIKit 的 API,這個(gè)框架允許你獲取 SwiftUI 視圖的底層 UIKit 或 AppKit 元素。
例如修改設(shè)置 List 的分割線,我們就可以拿到底層的 tableview 對(duì)象直接修改:
List {
Text("Item 1")
Text("Item 2")
}
.introspectTableView { tableView in
tableView.separatorStyle = .none
}