SwiftUI 是什么
SwiftUI 是蘋果2019年 WWDC 推出的新 UI 開發(fā)框架,主要特點是聲明式語法方仿,數(shù)據(jù)綁定,響應(yīng)式編程等统翩。和谷歌的跨平臺框架 Flutter 思想大同小異仙蚜。
為什么選擇 SwiftUI
SwiftUI 開發(fā)效率很高有預(yù)覽功能,代碼即寫即所見厂汗。支持 Apple 生態(tài)平臺委粉,一套代碼運(yùn)行 Mac、iPad娶桦。
現(xiàn)有項目使用 SwiftUI
由于 SwiftUI 最低支持 iOS13 系統(tǒng)版本贾节,如果你的項目符合匣掸,完全可以使用 SwiftUI 開發(fā),目前 SwiftUI 一些 API 還不完善氮双,缺少一些功能碰酝,還離不開 UIKit ,所以蘋果提供了接口戴差,可以在 SwiftUI 中使用 UIKit 來彌補(bǔ)目前 SwiftUI 的不足送爸,所以我們完全不用擔(dān)心。
目前有哪些坑
畢竟是新框架還在慢慢完善暖释,API 不穩(wěn)定袭厂,功能不完善,還有可能會出現(xiàn)一些莫名其妙難以定位的 Bug球匕,需要慢慢填坑纹磺。
SwiftUI 學(xué)習(xí)成本
學(xué)習(xí)成本不算高,上手很快亮曹,如果你沒有接觸過 React橄杨、Flutter等跨平臺開發(fā)框架,還是需要多學(xué)習(xí)些照卦,主要是命令式到聲明響應(yīng)式編程思想的轉(zhuǎn)變式矫。
推薦的學(xué)習(xí)資料
由于最低版本限制,目前使用 SwiftUI 開發(fā)的很少役耕,除了一些新項目采转,大部分主流 App 還沒有接入 SwiftUI,普及還需要時間瞬痘,這就導(dǎo)致了目前 SwiftUI 資料很少故慈,網(wǎng)上能搜到的都是零零散散的,并不能很好系統(tǒng)的學(xué)習(xí)框全,需要自己花時間看官方文檔和教程察绷,官方 SwiftUI 的教程很完善,一定要跟著敲一下代碼竣况。另外我最推薦的就是看 19年 WWDC 和 20年 WWDC 關(guān)于 SwiftUI 的視頻克婶,有中文字幕,包含 UI丹泉,布局情萤,動畫,數(shù)據(jù)流摹恨,Combine 響應(yīng)式框架等講解筋岛,強(qiáng)烈推薦。我用一個星期把 WWDC 視頻看完晒哄,已經(jīng)可以上手開發(fā)了睁宰,目前我們有一個新項目正在使用 SwiftUI 開發(fā)肪获。
另外推薦兩個方便上手開發(fā)的框架,可以少走不少彎路
-
SwiftUIX
使用 SwiftUI 開發(fā)最頭疼的就是之前使用的一些 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 底層實現(xiàn)大部分是基于 UIKit 框架的预侯,由于 SwiftUI 部分 API 不完善致开,我們很可能要用到 UIKit 的 API,這個框架允許你獲取 SwiftUI 視圖的底層 UIKit 或 AppKit 元素萎馅。
例如修改設(shè)置 List 的分割線双戳,我們就可以拿到底層的 tableview 對象直接修改:
List {
Text("Item 1")
Text("Item 2")
}
.introspectTableView { tableView in
tableView.separatorStyle = .none
}