SwiftUI 2.0 能否構(gòu)建整個iOS應(yīng)用(wwdc20)

使用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篇

Combine篇

TextField篇

JSON文件篇


一篇文章系列

技術(shù)交流

QQ:3365059189
SwiftUI技術(shù)交流QQ群:518696470

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蛹疯,隨后出現(xiàn)的幾起案子戒财,更是在濱河造成了極大的恐慌,老刑警劉巖捺弦,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饮寞,死亡現(xiàn)場離奇詭異,居然都是意外死亡列吼,警方通過查閱死者的電腦和手機幽崩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寞钥,“玉大人慌申,你說我怎么就攤上這事±碇#” “怎么了蹄溉?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長您炉。 經(jīng)常有香客問我柒爵,道長,這世上最難降的妖魔是什么赚爵? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任餐弱,我火速辦了婚禮宴霸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘膏蚓。我一直安慰自己,他們只是感情好畸写,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布驮瞧。 她就那樣靜靜地躺著,像睡著了一般枯芬。 火紅的嫁衣襯著肌膚如雪论笔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天千所,我揣著相機與錄音狂魔,去河邊找鬼。 笑死淫痰,一個胖子當(dāng)著我的面吹牛最楷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播待错,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宵膨?” 一聲冷哼從身側(cè)響起迁酸,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瓜客,沒想到半個月后适瓦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡谱仪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年玻熙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芽卿。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡揭芍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出卸例,到底是詐尸還是另有隱情称杨,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布筷转,位于F島的核電站姑原,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏呜舒。R本人自食惡果不足惜锭汛,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧唤殴,春花似錦般婆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至配名,卻和暖如春啤咽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背渠脉。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工宇整, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芋膘。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓鳞青,卻偏偏與公主長得像,于是被迫代替她去往敵國和親索赏。 傳聞我的和親對象是個殘疾皇子盼玄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354