SwiftUI填充开关内的视图



有人知道执行以下操作的正确方法吗:

我有一个生成路径的视图,我想用颜色或渐变(这是不同的类型(填充它。

为此,我有一个从父视图传递到视图的枚举:

enum FillColor {
case color(_ color: Color)
case gradient(color1: Color, color2: Color)
}

在一个视图中,我有一条路径:

var body: some View {
GeometryReader { geometry in
Path { path in
...
}
}   
}

然后我需要切换并执行类似的smth

switch color {
case .color(let c):
path.fill(c)
case .gradient(let c1, let c2):
let gradient = ...
path.fill(gradient)
}

是否为Path创建变量?但我也需要使用GeometryReader

所以我所做的是将创建路径封装到一个函数中,然后使用它来避免代码重复
我将路径作为inout参数传递,以便能够对其进行变异。
当然,这不是理想的解决方案。。

GeometryReader { geometry in
switch color {
case .color(let c):
Path { path in createPath(&path, geometry: geometry) }
.fill(c)
case .gradient(let c1, let c2):
let gradient = LinearGradient(...)
Path { path in createPath(&path, geometry: geometry) }
.fill(gradient)
}
}

最新更新