我有一个关于我的 Swift / SwiftUI 应用程序架构的问题,该应用程序由一个 ListView、详细视图和包含 2 个输入视图的详细视图组成。具体来说,我想知道这是否是正确的方法。
架构如下:
列表视图启动视图模型控制器的@StateObjct。
@StateObject var viewModel = ListViewModelController()
视图模型控制器:
class ListViewModelController: ObservableObject {
@Published var model: ListViewModel
init() {
self.model = ListViewModel()
}
}
列表视图模型如下所示:
struct Exercise: Hashable, Identifiable {
let id = UUID()
var name: String
var weight: String
var repetitions: String
}
struct ListViewModel {
var exercises = [
Exercise(name: "crunches", weight: "80 kg", repetitions: "100"),
Exercise(name: "curls", weight: "10 kg", repetitions: "12"),
Exercise(name: "dips", weight: "Bodyweight", repetitions: "10")
]
}
我通过以下方式将练习变量传递给详细视图:
List {
ForEach($viewModel.model.exercises, id: \.self) {$exercise in
ExerciseConfigutationView(exercise: $exercise)
}
.onDelete(perform: delete)
.onMove(perform: move)
}
详细视图接受练习变量作为绑定:
@Binding var exercise: Exercise
问题是,每次我尝试显示 ListView 时,程序都会冻结而没有警告或错误。我想我对绑定/属性包装器有误解。
谢谢你的帮助。