我通常更喜欢扩展,因为它们可以为您提供更具可读性的代码,并且编写起来通常更短。实际上,我目前正在撰写带有一些技巧的文章。我完成了一篇关于View扩展的文章,可在此处获得。
但是,存在差异。最后一个。使用ViewModifier,您可以使用@State变量,但不能使用View扩展名。这是一个例子:
struct ContentView: View {
var body: some View {
VStack {
Text("Hello, how are you?").modifier(ColorChangeOnTap())
}
}
}
struct ColorChangeOnTap: ViewModifier {
@State private var tapped: Bool = false
func body(content: Content) -> some View {
return content.foregroundColor(tapped ? .red : .blue).onTapGesture {
self.tapped.toggle()
}
}
}