SwiftUI為我們提供了內(nèi)置的修飾符,如一系列的font(),background()和clipShape()。但是,我們也可以創(chuàng)建執(zhí)行特定操作的自定義修飾符。
例如,我們自定義一個(gè)項(xiàng)目中常用的文本,設(shè)置其字體大小、字重、顏色、背景色等。創(chuàng)建自定義修飾符需要遵循ViewModifier協(xié)議,實(shí)現(xiàn)其body方法
定義:
struct Title: ViewModifier {
func body(content: Content) -> some View {
content
.font(.largeTitle)
.foregroundColor(.white)
.padding()
.background(Color.blue)
.clipShape(RoundedRectangle(cornerRadius: 10))
}
}
使用:
Text("Hello World")
.modifier(Title())
為了更便捷的使用,我們可以將實(shí)現(xiàn)的自定義修飾符擴(kuò)展為View的方法,便于調(diào)用
extension View {
func titleStyle() -> some View {
self.modifier(Title())
}
}
我們現(xiàn)在可以像這樣使用修飾符:
Text("Hello World")
.titleStyle()
one more thing:自定義修飾符不僅可以應(yīng)用其他現(xiàn)有修飾符,還可以根據(jù)需要?jiǎng)?chuàng)建新的視圖結(jié)構(gòu)。請(qǐng)記住的是,修飾符返回新對(duì)象而不是修改現(xiàn)有對(duì)象,因此我們可以創(chuàng)建一個(gè)將視圖嵌入堆棧并添加另一個(gè)視圖的對(duì)象。
自定義一個(gè)水印修飾符:
struct Watermark: ViewModifier {
var text: String
func body(content: Content) -> some View {
ZStack(alignment: .bottomTrailing) {
content
Text(text)
.font(.caption)
.foregroundColor(.white)
.padding(5)
.background(Color.black)
}
}
}
extension View {
func watermarked(with text: String) -> some View {
self.modifier(Watermark(text: text))
}
}