protocol ViewModifier
一个你应用于视图或其他视图修饰符的修饰符,产生原始值的不同版本
当你想要创建一个可重用的修饰符,可以将其应用到任何视图上时,应该采用 ViewModifier 协议。 ,并实现 func body(content: Content) -> some View
struct CustomModifier:ViewModifier{
func body(content: Content) -> some View {
content
.padding()
.background(.red)
.foregroundColor(.blue)
.cornerRadius(20)
.shadow(radius: 5)
}
}
例如上面这样就自定义了一个ViewModifier,并可以重复使用
struct ContentView: View {
var body: some View {
VStack {
Text("示例1").modifier(CustomModifier())
Text("示例2").modifier(CustomModifier())
Text("示例3").modifier(CustomModifier())
}
}
}
上面可以直接将 modifier(:) 应用到一个视图上,但是更常见和符合SwiftUI风格的方法是使用 modifier(:) 来定义对 View 类型自身的扩展,从而将视图修饰符整合进去。
import SwiftUI
// 创建自定义修饰符
struct CustomModifier:ViewModifier {
var cornerRadius: CGFloat
var backgroundColor: Color
var foregroundColor: Color
func body(content: Content) -> some View {
content
.padding()
.background(backgroundColor)
.foregroundColor(foregroundColor)
.cornerRadius(cornerRadius)
.shadow(radius: 5)
}
}
//对 View类型自身的扩展,从而将视图修饰符整合进去,这样更符合SwiftUI的书写风格
extension View {
func customModifier(_ backgroundColor:Color,_ foregroundColor:Color,_ cornerRadius:CGFloat) -> some View {
self.modifier(CustomModifier(cornerRadius: cornerRadius, backgroundColor: backgroundColor, foregroundColor: foregroundColor))
}
}
struct ContentView: View {
var body: some View {
VStack {
Text("示例1").customModifier(.red, .blue, 20)
Text("示例2").customModifier(.gray, .blue, 20)
Text("示例3").customModifier(.yellow, .blue, 20)
}
}
}