我有兩個模型,即練習模型和例程模型,其中一個例程由一個或多個練習組成。我正在嘗試使用來自 ExerciseArrayObject 類的資料陣列的內容作為我的 RoutineArrayObject 資料陣列的一部分。
我收到以下錯誤:
'self' used in property access 'exercises' before all stored properties are initialized
這是練習陣列物件:
import Foundation
import SwiftUI
class ExerciseArrayObject: ObservableObject {
@Published var dataArray = [ExerciseModel]()
init() {
//print("FETCH FROM DATABASE HERE")
let exercise1 = ExerciseModel(exerciseID: "", userID: "", username: "userA", exerciseTitle: "Exercise 1", dateCreate: Date(), exerciseImage: "logo", repsInfo: "12 reps", setsInfo: "3 sets")
let exercise2 = ExerciseModel(exerciseID: "", userID: "", username: "userB", exerciseTitle: "Exercise 2", dateCreate: Date(), exerciseImage: "logo", repsInfo: "8 reps", setsInfo: "4 sets")
let exercise3 = ExerciseModel(exerciseID: "", userID: "", username: "userC", exerciseTitle: "Exercise 3", dateCreate: Date(), exerciseImage: "logo", repsInfo: "5 reps", setsInfo: "5 sets")
let exercise4 = ExerciseModel(exerciseID: "", userID: "", username: "userD", exerciseTitle: "Exercise 4", dateCreate: Date(), exerciseImage: "logo", repsInfo: "20 reps", setsInfo: "10 sets")
let exercise5 = ExerciseModel(exerciseID: "", userID: "", username: "userE", exerciseTitle: "Exercise 5", dateCreate: Date(), exerciseImage: "logo", repsInfo: "10 reps", setsInfo: "3 sets", sharedUserUsername: "Shared User")
self.dataArray.append(exercise1)
self.dataArray.append(exercise2)
self.dataArray.append(exercise3)
self.dataArray.append(exercise4)
self.dataArray.append(exercise5)
}
}
這是 RoutineArrayObject:
class RoutineArrayObject: ObservableObject {
@ObservedObject var exercises: ExerciseArrayObject
@Published var dataArray = [RoutineModel]()
init() {
//print("FETCH FROM DATABASE HERE")
let routine1 = RoutineModel(routineID: "", userID: "", username: "user1", routineTitle: "Yoga Routine", exercises: exercises.dataArray, dateCreate: Date(), routineImage: "demoexercise", noOfExercises: "\(exercises.dataArray.count)")
let routine2 = RoutineModel(routineID: "", userID: "", username: "user2", routineTitle: "Core Routine", exercises: exercises.dataArray, dateCreate: Date(), routineImage: "logo", noOfExercises: "\(exercises.dataArray.count)", sharedUserID: "", sharedUserUsername: "Shared User")
self.dataArray.append(routine1)
self.dataArray.append(routine2)
}
}
uj5u.com熱心網友回復:
假設ExerciseModel和RoutineModel是結構,您可以使用完成閉包嘗試這種方法。這將保留您的兩個模型并使用ExerciseArrayObject類中資料陣列的內容作為您RoutineArrayObject的資料陣列的一部分。
class ExerciseArrayObject: ObservableObject {
@Published var dataArray = [ExerciseModel]()
init() {
ExerciseArrayObject.fetchExcersices() { arr in
self.dataArray = arr
}
}
static func fetchExcersices(completion: @escaping([ExerciseModel]) -> ()) {
//print("FETCH FROM DATABASE HERE")
var excersices = [ExerciseModel]()
let exercise1 = ExerciseModel(exerciseID: "", userID: "", username: "userA", exerciseTitle: "Exercise 1", dateCreate: Date(), exerciseImage: "logo", repsInfo: "12 reps", setsInfo: "3 sets")
let exercise2 = ExerciseModel(exerciseID: "", userID: "", username: "userB", exerciseTitle: "Exercise 2", dateCreate: Date(), exerciseImage: "logo", repsInfo: "8 reps", setsInfo: "4 sets")
let exercise3 = ExerciseModel(exerciseID: "", userID: "", username: "userC", exerciseTitle: "Exercise 3", dateCreate: Date(), exerciseImage: "logo", repsInfo: "5 reps", setsInfo: "5 sets")
let exercise4 = ExerciseModel(exerciseID: "", userID: "", username: "userD", exerciseTitle: "Exercise 4", dateCreate: Date(), exerciseImage: "logo", repsInfo: "20 reps", setsInfo: "10 sets")
let exercise5 = ExerciseModel(exerciseID: "", userID: "", username: "userE", exerciseTitle: "Exercise 5", dateCreate: Date(), exerciseImage: "logo", repsInfo: "10 reps", setsInfo: "3 sets", sharedUserUsername: "Shared User")
excersices.append(exercise1)
excersices.append(exercise2)
excersices.append(exercise3)
excersices.append(exercise4)
excersices.append(exercise5)
completion(excersices) // <-- todo deal with errors etc...
}
}
class RoutineArrayObject: ObservableObject {
@Published var dataArray = [RoutineModel]()
init() {
ExerciseArrayObject.fetchExcersices() { exercises in
print("--> exerciseArray: \(exercises)")
self.fetchRoutines(exercises: exercises) { _ in
print("--> routineArray: \(self.dataArray)")
}
}
}
func fetchRoutines(exercises: [ExerciseModel], completion: @escaping(Bool) -> ()) {
//print("FETCH FROM DATABASE HERE")
let routine1 = RoutineModel(routineID: "", userID: "", username: "user1", routineTitle: "Yoga Routine", exercises: exercises, dateCreate: Date(), routineImage: "demoexercise", noOfExercises: exercises.count)
let routine2 = RoutineModel(routineID: "", userID: "", username: "user2", routineTitle: "Core Routine", exercises: exercises, dateCreate: Date(), routineImage: "logo", noOfExercises: exercises.count, sharedUserID: "", sharedUserUsername: "Shared User")
self.dataArray.append(routine1)
self.dataArray.append(routine2)
completion(true) // <-- todo deal with errors etc...
}
}
您還可以使用其他技術來代替基本的完成閉包,例如 async/await 并發任務。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/401294.html
