如何以编程方式更改 swiftUI DatePicker 的选定值

How to change selected value of swiftUI DatePicker programmatically

我有一个由三个 swiftUI 选择器(两个 DatePickers 和一个标准字符串选择器)组成的 swiftUI 表单。当字符串 Picker 的值发生变化时,我试图更改第二个 DatePicker 的选定值。

我在字符串选择器上使用 .onChange 来更新基础值,这工作正常(我添加了一个文本行来显示截止日期值,以便可以验证更改)。但是,我希望到期日期选择器在绑定值更改时更新它显示的日期。

*以下屏幕截图中的值为初始设置值。

struct FormWithPicker: View {
    @StateObject var formValues = FormValues()
    
    var body: some View {
        NavigationView {
            Form{
                // invoice date
                DatePicker("Invoice Date:", selection: $formValues.invoiceDate, displayedComponents: [.date])
                
                // terms
                Picker("Terms:", selection: $formValues.invoiceTerms) {
                    ForEach(formValues.terms, id: \.self) { term in
                        Text(term)
                    }
                }
                .onChange(of: formValues.invoiceTerms, perform: { _ in
                    formValues.incrementDueDate()
                })
                
                // due date
                DatePicker("Due Date:", selection: $formValues.dueDate, displayedComponents: [.date])
                    
                // text
                Text(formValues.dueDate.description)
                
            }
        }
    }
}

我们需要依赖 DatePicker 外部更改的 dueDate 并重建它。 .id 修饰符对此很有用,比如

DatePicker("Due Date:", selection: $formValues.dueDate, displayedComponents: [.date])
    .id(formValues.dueDate)    // << here !!

测试 Xcode 13.2 / iOS 15.2