绑定到枚举的关联值

New*_*Dev 7 swift swiftui

是否有一种标准方法可以将 a 绑定TextField到枚举的关联值?

所以,鉴于此:

enum Choice {
  case one(String)
  case two(String)
}
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式将它用作视图中的绑定吗:

@State var choice: Choice = .one("")

var body: some View {
   TextField("", text: $choice) // <- this clearly wouldn't work
}
Run Code Online (Sandbox Code Playgroud)

这样,如果choice设置为choice = .one(""),则 TextField 将更新 的关联值one

编辑

澄清一下,是否可以只绑定每个的关联值,因此如果choice变量是.one,那么.one的关联值就会改变;与.two、 等相同。

Leo*_*bus 6

您可以扩展枚举并添加带有 getter 和 setter 的文本属性:

extension Choice {
    var text: String {
        get {
            switch self {
            case let .one(string): return string
            case let .two(string): return string
            }
        }
        set {
            switch self {
            case .one: self = .one(newValue)
            case .two: self = .two(newValue)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地传递文本属性:

TextField("", text: $choice.text) 
Run Code Online (Sandbox Code Playgroud)