类型为"NSSet"的值没有成员"_" - 无法通过 NSSet 访问属性



我有一个包含3个实体的核心数据模型:Exercise、ExerciseSet和Workout。它的设置是让Exercise和ExerciseSet是一对一的关系而Workout和ExerciseSet是一对多的关系。我试图通过锻炼访问ExerciseSet中的属性,但当我运行此代码:

struct WorkoutView: View {
@State var workout = Workout()

var body: some View {

Text("Sets in Workout: (workout.exerciseSets.count)")

ForEach(Array(arrayLiteral: workout.exerciseSets), id: .self) { e in
Text("Exercise Name: (e.exercise.exercisename), Reps: (e.reps), Weight: (e.weight)")         
}

我得到以下错误

Value of type 'NSSet' has no member 'exercise'
Value of type 'NSSet' has no member 'reps'
Value of type 'NSSet' has no member 'weight'

当我在锻炼之外调用它们时,这些属性都存在,并且work . exercisesets .count按预期返回。

以下是每个实体的定义:

extension Exercise {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Exercise> {
return NSFetchRequest<Exercise>(entityName: "Exercise")
}
@NSManaged public var exercisename: String
@NSManaged public var id: UUID?
@NSManaged public var musclegroup: String?
@NSManaged public var exerciseSet: ExerciseSet?
}
extension Exercise : Identifiable {
}
extension ExerciseSet {
@nonobjc public class func fetchRequest() -> NSFetchRequest<ExerciseSet> {
return NSFetchRequest<ExerciseSet>(entityName: "ExerciseSet")
}
@NSManaged public var dateCompleted: Date
@NSManaged public var id: UUID?
@NSManaged public var reps: Int16
@NSManaged public var weight: Int16
@NSManaged public var exercise: Exercise
@NSManaged public var workout: Workout?
}
extension ExerciseSet : Identifiable {
}
extension Workout {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Workout> {
return NSFetchRequest<Workout>(entityName: "Workout")
}
@NSManaged public var id: UUID
@NSManaged public var notes: String?
@NSManaged public var workoutDate: Date
@NSManaged public var workoutMuscleGroup: String?
@NSManaged public var workoutName: String?
@NSManaged public var exerciseSets: NSSet

public var exerciseSetArray: [ExerciseSet] {
let set = exerciseSets as? Set<ExerciseSet> ?? []
return set.sorted {
$0.dateCompleted < $1.dateCompleted
}

}
}
// MARK: Generated accessors for exerciseSets
extension Workout {
@objc(addExerciseSetsObject:)
@NSManaged public func addToExerciseSets(_ value: ExerciseSet)
@objc(removeExerciseSetsObject:)
@NSManaged public func removeFromExerciseSets(_ value: ExerciseSet)
@objc(addExerciseSets:)
@NSManaged public func addToExerciseSets(_ values: NSSet)
@objc(removeExerciseSets:)
@NSManaged public func removeFromExerciseSets(_ values: NSSet)
}
extension Workout : Identifiable {
}

是否有一些东西,我错过了,以便能够通过锻炼访问练习集内的属性?谢谢你。

Swift中的NSSet不知道底层的类型。

workout.exerciseSetArray代替Array(arrayLiteral: workout.exerciseSets)

必须将NSSet转换为本机Set<ExerciseSet>才能访问属性。或者更简单一点,将exerciseSets声明为Set<ExerciseSet>。Core Data在原生Swift类型下工作得很好。

最新更新