如何在SwiftUI中自动将值从一个视图发布到另一个视图?

如何在SwiftUI中自动将值从一个视图发布到另一个视图?,swiftui,Swiftui,目前,我有一个带有日期选择器的视图,可以设置首选时间。我有一个UserData文件,它将首选时间存储在用户默认值中,最后,我还有一个视图,它将首选时间显示为字符串 我的问题是:首选时间在用户默认值中正确设置,但不会自动反映在第二个视图中。当我点击“后退”时,显示的时间不会改变。然而,当我退出应用程序并返回时,新的时间会反映出来 如何自动同步这两个视图 视图1(带日期选择器): 视图2(应自动显示首选时间) 和用户数据: import Foundation import SwiftUI clas

目前,我有一个带有日期选择器的视图,可以设置首选时间。我有一个UserData文件,它将首选时间存储在用户默认值中,最后,我还有一个视图,它将首选时间显示为字符串

我的问题是:首选时间在用户默认值中正确设置,但不会自动反映在第二个视图中。当我点击“后退”时,显示的时间不会改变。然而,当我退出应用程序并返回时,新的时间会反映出来

如何自动同步这两个视图

视图1(带日期选择器):

视图2(应自动显示首选时间)

和用户数据:

import Foundation
import SwiftUI

class UserData: ObservableObject {

@Published var wakeUpTime: Date = UserDefaults.standard.object(forKey: "wakeUpTime") as? Date ?? Date() {
        didSet {
            UserDefaults.standard.set(self.wakeUpTime, forKey: "wakeUpTime")
        }
    }
}

不清楚你的观点是如何结合在一起的。如果从
SettingsDetailView
中显示
settingsdailview
,则应通过构造函数传递用户数据,如

struct SettingsDetailView: View {
    
    @ObservedObject var userData: UserData    // << declared to be injected
// ...
}

您正在创建2个UserData()对象。您需要将用户数据对象传递给“详细信息”视图,而不是在“详细信息”视图中创建新对象screen@RajaKishan我对此也很好奇,是的,他/她正在创建2个UserData()对象,但既然它是一个类,它不是在使用同一个实例吗?
import Foundation
import SwiftUI

class UserData: ObservableObject {

@Published var wakeUpTime: Date = UserDefaults.standard.object(forKey: "wakeUpTime") as? Date ?? Date() {
        didSet {
            UserDefaults.standard.set(self.wakeUpTime, forKey: "wakeUpTime")
        }
    }
}
struct SettingsDetailView: View {
    
    @ObservedObject var userData: UserData    // << declared to be injected
// ...
}
struct SettingsView: View {

    @ObservedObject var userData = UserData()
        
    static var dateFormatter: DateFormatter = {
            let formatter = DateFormatter()
            formatter.dateFormat = "hh:mm a"
            return formatter
        }()

    var body: some View {
        
     // ... 

       SettingsDetailView(userData: self.userData)

     // ...
   }
}