Realm Swift - переменное количество значений в объекте - PullRequest
0 голосов
/ 27 апреля 2018

В ситуации, когда случайная «тренировка» может иметь любое количество упражнений, скажем, от 5 до 20, есть ли способ сохранить «объект тренировки» в Царстве, где есть переменное количество значений (упражнений)?

например. В настоящее время у меня есть что-то вроде моей объектной модели:

@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

Это работает нормально, но также часто заполняет многие поля нулем (например, если в каждой тренировке есть только 3 упражнения и 6 динамических переменных, как указано выше).

Кажется, это просто не элегантное решение, но не уверен, что есть лучший способ?

1 Ответ

0 голосов
/ 27 апреля 2018

Вы должны использовать List для хранения динамического числа переменных, прикрепленных к вашей тренировке. Вам следует создать класс WorkoutExercise, содержащий повторы и название упражнения, и сохранить список WorkoutExercise в вашей модели WorkoutSession.

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 и нет необходимости делать его постоянным свойством, потому что вы всегда можете пересчитать его без больших вычислительных затрат.

...