如何将绑定变量的值传递给SwiftUI中两个DatePicker中的另一个绑定变量?

时间:2019-09-19 19:42:41

标签: datepicker swiftui

我在DatePicker中有两个Form。第二个日期的开始日期取决于第一个DatePicker的日期。可以使用PartialRangeFrom来解决,但是用作选择的绑定对象不会改变。

struct ContentView: View {

    @State private var startDate: Date = Date()
    @State private var endDate: Date = Date()

    var body: some View {
        Form {
            DatePicker(selection: $startDate, displayedComponents: .date, label: { Text("Start date") })

            DatePicker(selection: $endDate, in: startDate..., displayedComponents: .date, label: { Text("End date") })

        }
    }
}

第二个日期选择器的确发生了更改,并在第一个日期选择器发生更改时刷新,但是与$endDate链接的标签没有更改,它仍继续显示初始化值。

如何在第一个日期选择器更改的同时在标签和滚轮刷新中执行类似self.endDate = self.startDate的操作?

1 个答案:

答案 0 :(得分:0)

首先,创建一个具有以下属性的新结构:startdate和enddate,并且在该结构内部使用观察者函数 didSet 。这是代码示例。

struct ContentView: View {
    @State var model = DateRangeModel()

    var body: some View {
        Form {
            DatePicker(selection: $model.startDate, displayedComponents: .date, label: { Text("Start date") })

            DatePicker(selection: $model.endDate, in: model.startDate..., displayedComponents: .date, label: { Text("End date") })

        }

    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}


struct DateRangeModel {
    var endDate: Date = Date()
    var startDate: Date = Date() {
        didSet {
             endDate = startDate
        }
       }
}