我试图弄清楚为什么苹果在两个不同的视图中用@State实例化DailyScrum.Data。我以为你应该只有一个真相来源。我猜一种是用于创建新的scrum数据,另一种是提供更新或编辑scrum数据。但我不确定。
import SwiftUI
struct DetailView: View {
@Binding var scrum: DailyScrum
@State private var data = DailyScrum.Data()
@State private var isPresentingEditView = false
var body: some View {
List {
Section(header: Text("Meeting Info")) {
NavigationLink(destination: MeetingView(scrum: $scrum)) {
Label("Start Meeting", systemImage: "timer")
.font(.headline)
.foregroundColor(.accentColor)
}
}
}
}
}import SwiftUI
struct ScrumsView: View {
@Binding var scrums: [DailyScrum]
@Environment(\.scenePhase) private var scenePhase
@State private var isPresentingNewScrumView = false
@State private var newScrumData = DailyScrum.Data()
let saveAction: ()->Void
var body: some View {
List {
ForEach($scrums) { $scrum in
NavigationLink(destination: DetailView(scrum: $scrum)) {
CardView(scrum: scrum)
}
.listRowBackground(scrum.theme.mainColor)
}
}
.navigationTitle("Daily Scrums")
}
}


发布于 2022-08-02 22:38:29
DailyScrum.Data()并不是真正扮演source of truth的角色。
如果您密切关注,DailyScrum.Data()是作为类似于(临时/助手变量)的东西创建的。
假设您有一个编辑视图,用户可以编辑数据。当用户输入新数据时,这些新数据将暂时存储在DailyScrum.Data()中,因此不会影响您的实际source of truth。
然后,只有当用户确认要保存时,才会将这些数据传递给您的source of truth保存。
现在您知道了为什么需要这个DailyScrum.Data(),因为没有它,您的所有数据都会立即更改,甚至在用户确认要更改之前。
https://stackoverflow.com/questions/73214238
复制相似问题