SwiftUI是一個(gè)用戶界面工具包,它允許我們以聲明的方式設(shè)計(jì)應(yīng)用程序。這是一種很好的說(shuō)法,我們告訴SwiftUI希望的頁(yè)面外觀和工作方式,它去考慮和實(shí)現(xiàn)我們提出的需求。
與命令式UI相比,聲明式UI最容易理解。在命令式的用戶界面中,我們可能會(huì)讓一個(gè)函數(shù)在點(diǎn)擊按鈕時(shí)被調(diào)用,會(huì)根據(jù)所發(fā)生的事情定期修改用戶界面的外觀和工作方式。
命令式用戶界面會(huì)引起各種各樣的問(wèn)題。我們需要跟蹤代碼處于什么狀態(tài),并確保我們的用戶界面正確地反映了這種狀態(tài)。
如果有一個(gè)頁(yè)面有個(gè)影響UI的布爾屬性,我們有兩種狀態(tài):布爾值可能是開(kāi)或關(guān)。如果我們有兩個(gè)布爾函數(shù),A和B,我們現(xiàn)在有四個(gè)狀態(tài):
A關(guān),B關(guān)
A開(kāi),B關(guān)
A關(guān),B開(kāi)
A開(kāi),B開(kāi)
如果我們有三個(gè)布爾人?還是五個(gè)?或者整數(shù)、字符串、日期等等?好吧,那么我們就有了更多的復(fù)雜性。
如果你曾經(jīng)使用過(guò)一個(gè)應(yīng)用程序,說(shuō)你有一條未讀的消息,不管你試著告訴你是否讀過(guò)那該死的東西多少次,那就是一個(gè)狀態(tài)問(wèn)題——這是一個(gè)強(qiáng)制性的用戶界面問(wèn)題。
相比之下,聲明式UI讓我們可以一次告訴iOS應(yīng)用程序的所有可能狀態(tài)。我們可能會(huì)說(shuō),如果我們已登錄,則顯示歡迎消息,但如果我們已注銷(xiāo),則顯示登錄按鈕。我們不需要編寫(xiě)代碼來(lái)手動(dòng)在這兩種狀態(tài)之間移動(dòng)——這是一種丑陋的、必須的工作方式!
相反,當(dāng)狀態(tài)發(fā)生變化時(shí),我們讓SwiftUI在用戶界面布局之間移動(dòng)。我們已經(jīng)告訴它根據(jù)用戶是登錄還是注銷(xiāo)顯示什么,所以當(dāng)我們更改身份驗(yàn)證狀態(tài)時(shí),SwiftUI可以代表我們更新UI。
這就是聲明性的意思:我們不是讓SwiftUI組件手動(dòng)顯示和隱藏,我們只是告訴SwiftUI我們希望它遵循的所有規(guī)則,SwiftUI來(lái)確保這些規(guī)則得到執(zhí)行。
但SwiftUI并不止于此:它還充當(dāng)跨平臺(tái)的用戶界面層,可以跨iOS、macOS、tvo甚至watchOS工作。這意味著您現(xiàn)在可以學(xué)習(xí)一種語(yǔ)言和一種布局框架,然后將代碼部署到任何地方。
聲明式編程
聲明式編程(英語(yǔ):Declarative programming)是一種編程范式,與命令式編程相對(duì)立。它描述目標(biāo)的性質(zhì),讓計(jì)算機(jī)明白目標(biāo),而非流程。聲明式編程不用告訴計(jì)算機(jī)問(wèn)題領(lǐng)域,從而避免隨之而來(lái)的副作用。而命令式編程則需要用算法來(lái)明確的指出每一步該怎么做。
聲明式編程通常被看做是形式邏輯的理論,把計(jì)算看做推導(dǎo)。聲明式編程因大幅簡(jiǎn)化了并行計(jì)算的編寫(xiě)難度,自2009年起備受關(guān)注。
聲明式語(yǔ)言包包括數(shù)據(jù)庫(kù)查詢語(yǔ)言(SQL,XQuery),正則表達(dá)式,邏輯編程,函數(shù)式編程和組態(tài)管理系統(tǒng)。
聲明式編程透過(guò)函數(shù)、推論規(guī)則或項(xiàng)重寫(xiě)(term-rewriting)規(guī)則,來(lái)描述變量之間的關(guān)系。它的語(yǔ)言運(yùn)行器(編譯器或解釋器)采用了一個(gè)固定的算法,以從這些關(guān)系產(chǎn)生結(jié)果。
聲明式編程語(yǔ)言通常用作解決人工智能和約束滿足問(wèn)題。