使用SwiftUI能否構(gòu)建整個iOS應(yīng)用
直到今年的發(fā)布,使用SwiftUI構(gòu)建的應(yīng)用仍需要使用Apple以前的UI框架UIKit和AppKit中的機制來實現(xiàn)其入口點裤园,例如使用UIApplicationDelegate定義iPhone或iPad應(yīng)用的應(yīng)用委托撤师。
然而,今年比然,由于其API的一些新增功能丈氓,現(xiàn)在可以直接使用SwiftUI定義整個應(yīng)用程序。 例如强法,假設(shè)我們正在構(gòu)建一個播客應(yīng)用程序万俗,該應(yīng)用程序使用TabView作為其根視圖,然后它包含三個選項卡-庫視圖饮怯,發(fā)現(xiàn)視圖和搜索視圖:
struct RootView: View {
var body: some View {
TabView {
LibraryView()
DiscoverView()
SearchView()
}
}
}
在去年的iOS 13及其兄弟操作系統(tǒng)上闰歪,我們不得不使用UIHostingController(或在Mac上為NSHostingController)來實際呈現(xiàn)上述視圖,例如蓖墅,將其分配為UIWindow的rootViewController库倘。 但是現(xiàn)在,上面的根視圖層次結(jié)構(gòu)可以簡單地嵌入符合新App協(xié)議的類型中论矾,并通過使用Swift的新@main屬性注釋該類型教翩,它將用作我們應(yīng)用程序的入口點-無需 任何應(yīng)用程序委托或任何其他引導(dǎo)代碼:
@main struct PodcastApp: App {
var body: some Scene {
WindowGroup {
TabView {
LibraryView()
DiscoverView()
SearchView()
}
}
}
}
上面的WindowGroup類型是另一個新協(xié)議Scene的內(nèi)置實現(xiàn),它是一個本機SwiftUI贪壳,等效于去年引入的UIScene API饱亿,主要是為了使iPad應(yīng)用程序獲得多窗口支持。
雖然我們也可以創(chuàng)建自己的自定義場景類型,但是如果希望始終在我們所有應(yīng)用程序場景中呈現(xiàn)相同的視圖層次結(jié)構(gòu)彪笼,那么僅使用WindowGroup是一個不錯的選擇钻注。
但很酷的事情是,由于SwiftUI如此可組合配猫,即使我們選擇構(gòu)建自己的Scene幅恋,我們?nèi)匀豢梢允褂肳indowGroup來實現(xiàn)其主體,同時還提供我們自己的自定義邏輯泵肄。
例如捆交,在這里我們?yōu)椴タ蛻?yīng)用程序構(gòu)建了一個自定義場景,該場景使用新的scenePhase環(huán)境值來觀察場景的整體相位何時發(fā)生變化凡伊,例如零渐,檢測場景何時從活動狀態(tài)變?yōu)榉腔顒訝顟B(tài):
struct PodcastScene: Scene {
@Environment(\.scenePhase) private var phase
var body: some Scene {
WindowGroup {
TabView {
LibraryView()
DiscoverView()
SearchView()
}
}
.onChange(of: phase) { newPhase in
switch newPhase {
case .active:
// App became active
case .inactive:
// App became inactive
case .background:
// App is running in the background
@unknown default:
// Fallback for future cases
}
}
}
}
盡管新的App和Scene協(xié)議目前無法提供與UIKit和AppKit等效的功能和靈活性,但是某些應(yīng)用程序現(xiàn)在可以使用基于100%SwiftUI的實現(xiàn)這一事實實在是太酷了系忙,而且 SwiftUI作為框架向前邁出了一大步诵盼。
推薦
基礎(chǔ)文章推薦
經(jīng)典教程推薦
技術(shù)源碼推薦
推薦文章
CoreData篇
- SwiftUI數(shù)據(jù)存儲之做個筆記App 新增與查詢(CoreData)
- SwiftUI進階之存儲用戶狀態(tài)實現(xiàn)登錄與登出
- SwiftUI 數(shù)據(jù)之List顯示Sqlite數(shù)據(jù)庫內(nèi)容(2020年教程)
Combine篇
TextField篇
- 《SwiftUI 一篇文章全面掌握TextField文本框 (教程和全部源碼)》
- 《SwiftUI實戰(zhàn)之TextField風(fēng)格自定義與formatters》
- 《SwiftUI實戰(zhàn)之TextField如何給鍵盤增加個返回按鈕(隱藏鍵盤)》
- 《SwiftUI 當(dāng)鍵盤出現(xiàn)時避免TextField被遮擋自動向上移動》
- 《SwiftUI實戰(zhàn)之TextField如何給鍵盤增加個返回按鈕(隱藏鍵盤)》
JSON文件篇
一篇文章系列
- SwiftUI一篇文章全面掌握List(教程和源碼)
- 《SwiftUI 一篇文章全面掌握TextField文本框 (教程和全部源碼)》
- SwiftUI一篇文章全面掌握Picker,解決數(shù)據(jù)選擇(教程和源碼)
- SwiftUI一篇文章全面掌握Form(教程和源碼)
- SwiftUI Color 顏色一篇文章全解決
技術(shù)交流
QQ:3365059189
SwiftUI技術(shù)交流QQ群:518696470
- 請關(guān)注我的專欄icloudend, SwiftUI教程與源碼
http://www.reibang.com/c/7b3e3b671970