You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 03:05:33