如何在 SwiftUI 中过滤数组?

Mar*_*ike 5 swift swiftui

我正在制作一个应用程序,我想在其中多次过滤一组锻炼数据。

我曾经通过 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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

ido*_*ize 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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)