1.19 减少视图修饰符的维护量

原文链接: https://developer.apple.com/documentation/swiftui/reducing-view-modifier-maintenance

1.19 减少视图修饰符的维护量

把经常复用的视图修饰符打包成自定义视图修饰符。

概述

为了获得一致的视图,你可能会在各处反复复用同一个视图修饰符或同一组修饰符。例如,你可能对应用中许多文本实例应用相同的字体和前景色,让它们看起来一致。遗憾的是,这会带来维护上的困难,因为哪怕是格式上很小的改动(比如换一个字号),都需要修改代码中许多不同的地方。

为避免这种开销,请用 ViewModifier 协议的实例把一组修饰符收集到一个地方。然后扩展 View 协议,添加一个使用你的修饰符的方法,使它易于使用和理解。把这些修饰符收集在一起,就为你想修改它们时提供了一个唯一的修改位置。

创建自定义视图修饰符

创建自定义修饰符时,请按这组修饰符的用途来命名。例如,如果你反复对视图应用 caption 字体样式和次要配色方案,以表示次要样式,可以把它们收集为 CaptionTextFormat:

1
2
3
4
5
6
7
struct CaptionTextFormat: ViewModifier {
    func body(content: Content) -> some View {
        content
            .font(.caption)
            .foregroundColor(.secondary)
    }
}

用 modifier(_:) 方法应用你的修饰符。下面的代码把上面的例子应用到一个 Text 实例上:

1
2
Text("Some additional information...")
    .modifier(CaptionTextFormat())

扩展 View 协议以提供流畅的修饰符访问方式

为让自定义视图修饰符用起来更方便,请扩展 View 协议,添加一个应用该修饰符的函数:

1
2
3
4
5
extension View {
    func captionTextFormat() -> some View {
        modifier(CaptionTextFormat())
    }
}

有了这个扩展之后,就可以把它应用到文本视图上:

1
2
Text("Some additional information...")
    .captionTextFormat()