在SwiftUI時(shí)間里面竖伯,萬物皆視圖。如果您不能深入理解View母蛛,那就只能永遠(yuǎn)盲人摸象翩剪,不得要領(lǐng)。本文將帶您深入View彩郊,全面了解View的使用前弯,從您體驗(yàn)一下什么是高手的世界。
進(jìn)入SwiftUI和Flutter紀(jì)元后秫逝,我們編寫界面的方式發(fā)送了本質(zhì)區(qū)別恕出。傳統(tǒng)的模式,我們先創(chuàng)建視圖然后進(jìn)行視圖配置违帆。而在SwiftUI時(shí)間浙巫,我們實(shí)際上根本不會(huì)創(chuàng)建任何視圖,而是簡(jiǎn)單地描述我們系統(tǒng)的UI外觀,剩下的工作就全部都由蘋果負(fù)責(zé)渲染了的畴。
三個(gè)實(shí)用的小伙伴Initializers渊抄、modifiers和 inheritance
總體來說,有三種方式可以配置SwiftUI視圖:
- 通過傳遞參數(shù)給初始化程序Initializers
- 使用modifiers進(jìn)行配置
- 通過配置視圖的容器
直接配置方式丧裁,鏈?zhǔn)椒椒?/h2>
例如下面,我們要配置Text文本視圖护桦,這個(gè)文本視圖在TitleView的body中,同時(shí)使用其初initializer和modifier來更改其字體和文本顏色:
struct TitleView: View {
var title: String
var body: some View {
Text(title)
.font(.headline)
.italic()
.foregroundColor(.blue)
}
}
上述將修飾符鏈接在一起的編程方式煎娇,避免直接修改變量數(shù)值二庵,這種編程方式就是SwiftUI的聲明式編程樣式。
上面是直接配置的示例缓呛,因?yàn)槲覀兺ㄟ^直接在其上調(diào)用方法來顯式設(shè)置和修改Text視圖眨猎。但是,SwiftUI還支持間接配置强经,因?yàn)樵S多不同的修飾符和屬性會(huì)自動(dòng)向下傳播到每個(gè)給定的視圖層次結(jié)構(gòu)中。
間接配置方式寺渗,俺就聽父親的
當(dāng)我們希望多個(gè)同級(jí)視圖采用相同的配置或樣式時(shí)匿情,這種間接繼承的配置將非常有用,例如在以下情況下信殊,我們同時(shí)配置了Text和List來顯示所有的視圖或樣式使用等寬字體的文本炬称,只需將字體分配給其父VStack:
struct ListView: View {
var title: String
var items: [Item]
@Binding var selectedItem: Item?
var body: some View {
VStack {
Text(title).bold()
List(items, selection: $selectedItem) { item in
Text(item.title)
}
}.font(.system(.body, design: .monospaced))
}
}
整個(gè)SwiftUI視圖層次結(jié)構(gòu)都可以通過其父級(jí)進(jìn)行配置的事實(shí)非常強(qiáng)大,因?yàn)樗刮覀兡軌驊?yīng)用共享的樣式和配置涡拘,而不必分別修改每個(gè)視圖玲躯。這不僅會(huì)導(dǎo)致代碼減少,而且還為我們的共享配置(如字體鳄乏,顏色等)建立了一個(gè)真實(shí)的來源跷车,而無需我們引入任何抽象來實(shí)現(xiàn)這一目標(biāo)。