即使在第一个视图Swiftui中设置了值,ObservedObject也会返回nil

问题描述

我有一个“实际课程”课程

class ActualCourse : ObservableObject {
    @Published var id : UUID?
    @Published var CourseName : String = ""
    
}

和两个结构“设置”和“课程”

struct Settings: View {
    @State private var action : Int? = 0
    @Observedobject var objCourse = ActualCourse()
    @State var courseId : UUID = UUID()
    @State var list : [Course] = [] // list is not empty,I didn't show it to you to make the code lighter
    
    init() {
        objCourse.id = UUID()
    }
    var body: some View {
        NavigationView{
            vstack{
    NavigationLink(destination: Course(),tag: 1,selection: $action){}
         List {
 let count = list.count
 ForEach(0 ..< count,id: \.self){ index in
           HStack {
Image(systemName: "chevron.right.circle.fill")
                                        .font(.title)
                                        .onTapGesture {
                                        objCourse.id = list[index].id
                                        objCourse.nomCourse = list[index].nomCourse
                                        print(objCourse.id!) // Id Appear when I click !
                                        self.action = 1
                                        }

但是当我导航到“课程”视图时,objCourse.id返回nil

struct Settings: View {
@Observedobject var objCourse = CourseActuelle()

....

.onAppear(){
            print(self.objCourse.id!) // RETURN nil
            
        }

我在做什么错?我必须在开始时给一个随机的UUID,因为我找不到其他方法...

解决方法

您在第二个视图中创建的CourseActuelle与您在初始化ID值的第一个视图中创建的{独立。如果希望它们相同,则可以在第二个视图中使用@EnvironmentObject并在第一个视图中注入它或以其他方式传递它。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...