我在一个Form
里有两个DatePicker
。第二个的开始日期取决于第一个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
操作?
首先,创建一个具有以下属性的新结构:startdate 和 enddate,并在该结构中使用观察者 funcdidSet。下面是代码的示例。
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
}
}
}