给我一个可选的日期,并且希望能够显示日期选择器。
import SwiftUI
struct ContentView: View {
@State var someDate: Date?
var body: some View {
OptionalDate(date: $someDate)
}
}
struct OptionalDate: View {
@Binding var date: Date?
var body: some View {
if date == nil {
return Text("No date").onTapGesture {
self.date = Date() // start picking!
}
} else {
return DatePicker(selection: $date, displayedComponents: .date) {
Text("Due Date")
}
}
}
}
Cannot convert value of type 'Binding<Date?>' to expected argument type 'Binding<Date>'
更不用说我将不得不找出不透明的视图...
答案 0 :(得分:3)
自定义绑定是您的朋友!此外,对于条件视图,您始终可以使用Group
,这将使您的生活变得更加轻松,并且可以解决Opaque
问题,因为无论您拥有什么条件,它都将始终被视为Group
子视图。
struct OptionalDate: View {
@Binding var date: Date?
var body: some View {
Group {
if date == nil {
Text("No date").onTapGesture {
self.date = Date()
}
} else {
DatePicker(selection: dateBinding, displayedComponents: .date) {
Text("Due Date")
}
}
}
}
private var dateBinding: Binding<Date> {
Binding(get: {
self.date!
}, set: {
self.date = $0
})
}
}