SwiftUI中选择Full Body时取消NSPredicate过滤返回全列表
解决Core Data按肌群过滤/返回全部数据的问题
你只需要在ListView的初始化方法里添加条件判断,根据传入的part值决定是否使用谓词即可。因为FetchRequest的predicate参数是可选类型,传入nil就会返回所有实体数据。
修改后的ListView代码如下:
import SwiftUI struct ListView: View { var part: String @FetchRequest var exercises: FetchedResults<Exercise> init(part: String) { self.part = part // 条件判断:如果是Full Body则不传谓词,否则使用肌群匹配谓词 let predicate: NSPredicate? = part == "Full Body" ? nil : NSPredicate(format: "musclegroup == %@", part as CVarArg) self._exercises = FetchRequest( entity: Exercise.entity(), sortDescriptors: [], predicate: predicate ) } var body: some View { List(exercises) { e in Text(e.exercisename) } } }
额外优化建议
你当前ExerciseList里的selectedPart初始值是" ",这会导致初始化时没有匹配的肌群数据,建议改成默认选中某个有效选项,比如:
@State private var selectedPart = "Full Body"
内容的提问来源于stack exchange,提问作者Rachel
相关产品推荐
相关产品推荐

