首页 文章

Realm Swift - 对象中可变数量的值

提问于
浏览
0

在随机“锻炼”可能有5到20个任意数量的练习的情况下,有没有办法在Realm中保存“锻炼对象”,其中有不同数量的值(练习)?

例如我目前有这样的东西作为我的对象模型:

@objc dynamic var workoutID = UUID().uuidString
    @objc dynamic var workoutName = ""
    @objc dynamic var totalExercisesCount = 0
    @objc dynamic var exerciseOne = ""
    @objc dynamic var repsExerciseOne = 0
    @objc dynamic var exerciseTwo = ""
    @objc dynamic var repsExerciseTwo = 0
    @objc dynamic var exerciseThree = ""
    @objc dynamic var repsExerciseThree = 0
    @objc dynamic var exerciseFour = ""
    @objc dynamic var repsExerciseFour = 0
    @objc dynamic var exerciseFive = ""
    @objc dynamic var repsExerciseFive = 0
    @objc dynamic var exerciseSix = ""
    @objc dynamic var repsExerciseSix = 0

这样可以正常工作,但它也经常使用'null'填充许多字段(例如,如果在特定锻炼中只有3个练习,并且如上所述有6个动态变量) .

它只是一个非常不优雅的解决方案,但不确定是否有更好的方法?

1 回答

  • 1

    您应该使用 List 来存储附加到锻炼课程的动态数量的变量 . 您应该创建一个 WorkoutExercise 类,其中包含练习的代表和名称,并在 WorkoutSession 模型中存储 WorkoutExercise 的列表 .

    class WorkoutExercise: Object {
        @objc dynamic var name = ""
        @objc dynamic var reps = 0
    }
    
    class WorkoutSession: Object {
        @objc dynamic var workoutID = UUID().uuidString
        @objc dynamic var workoutName = ""
        let exercises = List<WorkoutExercise>()
        var totalExerciseCount: Int {
            return exercises.count
        }
    }
    

    我还建议将 totalExerciseCount 更改为计算属性(这也会使其被忽略,因为您无法在Realm中存储计算属性),因为它的值应始终反映 exercises 中的元素数量,并且不需要进行一个持久化的属性,因为你总是可以在没有大量计算成本的情况下重新计算它 .

相关问题