我想弄明白为什么苹果用@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")
    }
}

Scrumview to add a new scrum

enter image description here

推荐答案

在这里,DailyScrum.Data()并不是真正意义上的source of truth.

如果你仔细观察,你会发现DailyScrum.Data()类似于a temp/helper variable.

假设您有一个用户可以编辑数据的编辑视图.当用户输入一个新的数据时,这个新的数据会暂时存储在DailyScrum.Data()里面,所以它不会影响你的真实source of truth.

然后,只有当用户确认保存时,这些数据才会被传递到您的source of truth进行保存.

现在您知道为什么需要这DailyScrum.Data()了,因为如果没有它,您的所有数据都将立即更改,甚至在用户确认更改之前也是如此.

Swift相关问答推荐

如何在SWIFT中解码Instagram Backup中的字符串?

在SWIFT中使用Objective-C struct 时出错(在作用域中找不到类型)

NSApplication是否需要NSApplicationDelegate?

当将新值推送到 NavigationStack 时,SwiftUI 的 navigationDestination 已在堆栈的早期声明

Swift计时器未触发

在PrimitiveSequence上引用实例方法xxx需要类型A和any B等效

为什么 SwiftUI 不在工具栏菜单中反映 @State 属性值?

Swift 有没有办法在不使用 switch 语句的情况下获取关联值?

使用列表的下一项更新相同的视图

如何以快速 Select 器菜单样式调整图像大小

SwiftUI 文本被意外截断

如何防止 UITableViewCell 移动(Swift 5)

Swift 2.0 方法不能标记为@objc,因为参数的类型不能在 Objective-C 中表示

Swiftwhere数组扩展

如何在 GCD 中停止 DispatchWorkItem?

Swift 的 JSONDecoder 在 JSON 字符串中有多种日期格式?

Facebook SDK 4.0 IOS Swift 以编程方式注销用户

转换为 swift 3 后,视图控制器中出现奇怪的通用函数

滑动侧边栏菜单 IOS 8 Swift

ISO8601DateFormatter 不解析 ISO 日期字符串