【发布时间】:2018-04-30 14:20:50
【问题描述】:
问题 我需要在领域中保存一个列表,该列表由结构对象数组的属性组成(已通过 Segue 并正在填充表格视图)。这是每行上的“练习名称”和“代表次数”的形式。
我尝试了什么? 我在字段和格式方面将领域对象与结构相匹配,并尝试将数组保存为列表,例如"=List" 但这不起作用(“使用未声明的类型”)。我还尝试了各种方法来尝试保存每个表格行的属性,但同样无法正常工作(例如 = cell.workoutname)
研究我发现了这个How to save a struct to realm in swift? 但是,这不是为了保存我不认为的对象数组。但是,这 确实(第一个答案)让我想到了将每行中包含的值保存到 Realm 而不是实际的 Struct 数组的想法。我还发现了这个Saving Array to Realm in Swift?,但我认为这是针对数组已经由领域对象组成的,而不是像我这样的结构实例。
代码和详细信息
结构
我有一个如下所示的结构。另一个结构 (Workout Generator) 具有生成 x 个这些对象实例的函数。然后这些通过 Segue 传递到新的 VC TableView(每行显示一个锻炼名称和代表次数):
struct WorkoutExercise : Hashable, Equatable{
let name : String
let reps : Int
var hashValue: Int {
return name.hashValue
}
static func == (lhs: WorkoutExercise, rhs: WorkoutExercise) -> Bool {
return lhs.name == rhs.name
}
}
然后我有以下领域对象。一种是保存“WorkoutSession”。这将包含 WorkoutExercise 领域对象的领域列表。
class WorkoutSessionObject: Object {
@objc dynamic var workoutID = UUID().uuidString
@objc dynamic var workoutName = ""
let exercises = List<WorkoutExerciseObject>()
var totalExerciseCount: Int {
return exercises.count
}
}
class WorkoutExerciseObject: Object {
@objc dynamic var name = ""
@objc dynamic var reps = 0
}
我在尝试将锻炼详细信息保存到 Realm 时尝试了以下代码:
func saveToRealm() {
let workoutData = WorkoutSessionObject()
workoutData.workoutName = "test"
workoutData.workoutID = UUID().uuidString
workoutData.exercises = List<selectedWorkoutExerciseArray>
}
我认为阅读其他答案后我需要做什么
选项 1 - 不是尝试保存实际数组,而是保存每个表格行中的“名称”和“代表”?
选项 2 - 以某种方式将“selectedWorkoutExerciseArray”转换为领域对象列表?
当然可能还有其他选择!任何帮助/想法表示赞赏!
【问题讨论】:
-
为什么你同时拥有
WorkoutExerciseObject和结构WorkoutExercise?如果合并它们有意义,那么您可以直接操作Object的数组。 -
将结构转换为领域对象似乎需要做很多工作。为什么不只使用类?您不需要创建单独的对象等。
-
当我切换到一个类时,我的生成锻炼的函数会出现“名称、代表、不匹配任何可用的重载”的错误 - 使用类而不是结构?
-
嗯,你已经有一个 WorkoutExerciseObject 是一个类,所以不知道为什么你有这个结构。我认为你把它弄得太复杂了。您可以像使用代码中的任何对象一样使用 Realm 对象。当您可以修改您的领域对象以包含您需要的所有字段和方法时,没有理由存在类似的对象。