首页 > 解决方案 > 在领域中存储值

问题描述

我正在创建一个健身日记应用程序,并将锻炼值存储在以下领域: 最

我正在使用日期对锻炼进行排序。我想完成一些新的事情,我可以在同一个练习中设置不同的重量和次数。它基于这样的设计: 在此处输入图像描述

我认为数据库必须像这样,但不确定:

  • 23.11.2019
    • 杠铃卧推
      • 设置 1
        • 公斤:90
        • 代表:5
      • 设置 2
        • 公斤:87.5
        • 代表:6
    • 三头肌下推
      • 设置 1
        • 公斤:110
        • 代表:6
      • 设置 2
        • 公斤:110
        • 代表:6
      • 设置 3
        • 公斤:112.5
        • 代表:5

关于如何做到这一点的任何提示?

编辑; 这是我目前的Workout.swift课程(不知道如何编辑它以获得我想要的):

import Foundation
import RealmSwift

class Workout: Object {

    @objc dynamic var date: Date?
    @objc dynamic var name: String?
    @objc dynamic var exercise: String?
    @objc dynamic var sets = 0
    @objc dynamic var reps = 0
    @objc dynamic var kg: Double = 0.0
    @objc dynamic var notes: String?

}

标签: iosswiftxcoderealm

解决方案


您需要拥有三个对象(锻炼、锻炼和设置)并具有文档中概述的 2 个多对多关系:https ://realm.io/docs/swift/latest/#many-to-many

class Workout: Object {

    @objc dynamic var date: Date?
    // List of exercises (to-many relationship)
    var exercises = List<Exercise>()

}

.

class Exercise: Object {

    @objc dynamic var name: String?
    // List of sets (to-many relationship)
    var sets = List<Set>()
    var parentWorkout = LinkingObjects(fromType: Workout.self, property: "exercises")
}

.

class Set: Object {

    @objc dynamic var reps: Int = 0
    @objc dynamic var kg: Double = 0.0
    @objc dynamic var notes: String?
    // Define an inverse relationship to be able to access your parent workout for a particular set (if needed)
    var parentExercise = LinkingObjects(fromType: Exercise.self, property: "sets")

    convenience init(numReps: Int, weight: Double, aNote: String) {
       self.init()
       self.reps = numReps
       self.kg = weight
       self.notes = aNote
    }

}

编辑

添加示例代码

let aSet0 = Set(numReps: 10, weight: 5.0, aNote: "light workout")
let aSet1 = Set(numReps: 10, weight: 20.0, aNote: "medium workout")
let aSet2 = Set(numReps: 10, weight: 30.0, aNote: "heavy workout")

let aWorkout = Workout()
aWorkout.name = example
aWorkout.sets.append(objectsIn: [aSet0, aSet1, aSet2] )

另一个显示“卧推”训练组的示例代码:

// Find the Workout instance "Bench Press"
let benchPressWorkout = realm.objects(Workout.self).filter("name = 'Bench Press'")
// Access the sets for that instance
let sets = benchPressWorkout.sets
// Access set[0]
let set0 = sets[0]
// Access reps and kg for set 0
let reps0 = set0.reps
let kg0 = set0.kg
// and so on ...

推荐阅读