SwiftUI 填充开关内的视图

问题描述

有谁知道执行以下操作的正确方法

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

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

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

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

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

然后我需要切换并执行以下操作:

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)
  }
}