我该如何在SwiftUI中过滤数组?

5

我正在制作一款应用程序,想要多次过滤训练数据数组。

在UIKit中,我曾经使用filter、map和for循环来实现该功能,但在SwiftUI中却没有成功。

List {
    if workoutsModel.workoutsAreFiltered {
        ForEach(workoutsModel.workoutsFilter) { workoutFilter in
            if workoutFilter.isOn {
                ForEach(self.workoutsModel.workout) { workout in
                    if workoutFilter.name == workout.goal || workout.muscles.contains(workoutFilter.name) {
                        WorkoutsRow(workout: workout)
                    }
                }
            }
        }
    } else {
        ForEach(self.workoutsModel.workout) { workout in
            WorkoutsRow(workout: workout)
        }
    }
}

5
应该在模型中进行过滤,而不是在UI中进行。 - Claus Jørgensen
帮助他人怎么样?好的回答值得一些回报,对吧? - user7014451
1个回答

2
你需要在可以执行任意代码的地方进行过滤(例如,在传递给ForEach的值中),而不是在ForEach的实际主体内部进行过滤,因为它不希望返回Void
例如:
List {
    if workoutsModel.workoutsAreFiltered {
        ForEach(workoutsModel.workoutsFilter) { workoutFilter in
            // Not sure if the `if workoutFilter.isOn` is allowed, so I've instead used it to only iterate an empty array
            ForEach(!workoutFilter.isOn ? [] : self.workoutsModel.workout.filter { workout in
                workoutFilter.name == workout.goal ||
                workout.muscles.contains(workoutFilter.name)
            }) { workout in
                WorkoutsRow(workout: workout)
            }
        }
    } else {
        ForEach(self.workoutsModel.workout) { workout in
            WorkoutsRow(workout: workout)
        }
    }
}

1
没问题。请提供完整的文本,我会尽快翻译。 - idolize

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接