【发布时间】:2020-07-05 22:20:47
【问题描述】:
我有一个数据模型,我想在各种视图中使用它的数据。因此,首先我在从我的数据模型中轮询该信息时遇到问题,其次我在更新数据时遇到问题。 这是我的数据模型的一个示例,它具有三个视图。
数据模型
// A basic resocrd of each exercise in a workout
class WorkoutItem:ObservableObject, Identifiable{
var id:Int = 0
var name: String = "An Exercise"
var sets:Int = 3
var reps:Int = 10
func addSet() {
sets += 1
}
init(){
}
}
// The model for holding a workout
class WorkoutModel:ObservableObject{
@Published var workout:[WorkoutItem] = []
var lastID:Int = -1
/// Creates a newID based on the last known ID
private func newId()->Int{
lastID += 1
return lastID
}
func add(name:String, sets:Int, reps:Int){
let newExercise = WorkoutItem()
workout += [newExercise]
}
init() {
add(name: "Psuh Pp", sets: 1, reps: 8)
add(name: "Pull UPs", sets: 1, reps: 10)
}
}
查看 1
struct ContentView: View {
@ObservedObject var myWorkout: WorkoutModel
var body: some View {
List(self.myWorkout.workout) { item in
VStack(alignment: .leading) {
VStack(alignment: .leading) {
Text(item.name).font(.headline)
ExerciseEntryView(exItem: item)
}
}
}
}
}
查看 2
struct ExerciseEntryView: View {
var exItem: WorkoutItem
var body: some View {
VStack {
VStack(alignment: .leading){
ForEach(0 ..< exItem.sets, id: \.self){ row in
ExerciseEntryView_Row(setNumber: row)
}
}
Button(action: {
self.exItem.addSet()
}) {
Text("Add Set").foregroundColor(Color.red)
}
}
}
}
查看 3
struct ExerciseEntryView_Row: View {
var setNumber: Int
var body: some View {
HStack{
Text("Set Number \(setNumber)")
}
}
}
首先在运行代码时,如下图所示,标题仍然是默认值(“练习”),而它应该是Pull up 和Push up。此外,当我按下add set 时,该集合会在终端中更新,但不会更新视图。
知道为什么这不起作用吗?
【问题讨论】:
标签: swift swiftui observable data-modeling swift5