代码实现
import SwiftUI
// 定义一个视图修饰器
struct TextColorModifier: ViewModifier {
let color: Color
func body(content: Content) -> some View {
content
.foregroundColor(color)
}
}
// 扩展View,方便使用该修饰器
extension View {
func textColor(_ color: Color) -> some View {
modifier(TextColorModifier(color: color))
}
}
// 使用示例
struct ContentView: View {
var body: some View {
Text("Hello, World!")
.textColor(.red)
}
}
视图修饰器基本结构和工作原理
- 基本结构:
- 视图修饰器遵循
ViewModifier
协议。这个协议要求实现一个body
属性,body
接受一个Content
类型的参数,并返回一个符合View
协议的视图。
ContentView
是视图修饰器要修饰的视图,它是一个泛型类型,代表任何符合View
协议的视图。
- 在
body
中,我们对传入的content
视图应用其他视图修饰,比如在上述代码中,使用.foregroundColor
来改变文本颜色。
- 工作原理:
- 当我们对一个视图使用视图修饰器时,比如
Text("Hello, World!").textColor(.red)
,实际上是将Text
视图作为content
传递给TextColorModifier
的body
,然后body
返回一个经过修改的视图(这里是文本颜色变为红色的Text
视图)。
- 通过扩展
View
协议,我们可以为所有符合View
协议的视图添加自定义的视图修饰器方法,使得代码更简洁,使用更方便。