代码实现
import SwiftUI
struct ToggleTextStyleModifier: ViewModifier {
@State private var isBold = false
func body(content: Content) -> some View {
content
.font(isBold ? .systemWeight(.bold) : .systemWeight(.regular))
.onTapGesture {
isBold.toggle()
}
}
}
extension View {
func toggleTextStyle() -> some View {
modifier(ToggleTextStyleModifier())
}
}
struct ContentView: View {
var body: some View {
Text("Tap me to toggle style")
.toggleTextStyle()
}
}
管理状态要点
- @State的作用域:在视图修饰器中,
@State
变量的作用域仅限于修饰器内部。如果多个视图使用相同的修饰器,每个视图实例会有自己独立的状态,不会相互干扰。
- 可变性:
@State
变量是可变的,在视图修饰器中通过改变@State
变量的值来触发视图的重新渲染,从而更新显示效果。
- 状态隔离:确保视图修饰器中的状态与主视图或其他视图的状态相互隔离,避免不必要的状态共享导致的难以调试的问题。视图修饰器应该专注于自身的功能,管理好自己的状态,以保持代码的清晰和可维护性。