swift - 使用关联枚举数组创建 SwiftUI 绑定的正确方法是什么?
问题描述
我今天早些时候遇到了一些(无法解释的)崩溃,并将我的代码简化为如下所示。崩溃消失了,但我不确定100%。下面的代码是在枚举数组上创建绑定的正确方法吗?如果是的话,这段代码可以更简单吗?
import SwiftUI
enum TheEnum: Hashable {
case one(Int), two(Float)
}
class TestModel : ObservableObject {
@Published var enumArray = [TheEnum.one(5), TheEnum.two(6.0)]
}
struct ContentView: View {
@ObservedObject var testModel = TestModel()
var body: some View {
HStack {
ForEach(testModel.enumArray, id: \.self) { value -> AnyView in
switch value {
case .one(var intVal):
let b = Binding(get: {
intVal
}) {
intVal = $0
}
return AnyView(IntView(intVal: b))
case .two(var floatVal):
let b = Binding(get: {
floatVal
}) {
floatVal = $0
}
return AnyView(FloatView(floatVal: b))
}
}
}
}
}
struct IntView: View {
@Binding var intVal: Int
var body: some View {
Text("\(intVal)")
}
}
struct FloatView: View {
@Binding var floatVal: Float
var body: some View {
Text("\(floatVal)")
}
}
解决方案
推荐阅读
- flutter - Flutter 错误:没有为类 '_HomePageState' 定义 getter 'AudioPlayerState'
- java - 使用 Xtext 2.25 进行密钥形式验证
- json - 如何使用角度在 json/json 内的对象内显示数据
- terraform - 如何使用 terraform 创建具有多个子网 ID 的多个实例?
- rest - 部署我的 symfony api rest app CORS 错误
- reactjs - 如何解决 React 的路由问题
- c++ - C++ 范围是否支持视图中的投影?
- firebase - 显示器和 Firestore 之间的身份验证
- javascript - 用 vanilla JS 开玩笑 - 在 DOM 上测试生成的元素
- python-3.x - selenium 是否可以找到一个已经打开的 webdriver 会话,而不是创建一个新的选项卡/窗口?| 蟒蛇 | 硒