我得到了一个可选日期,并希望能够为其显示日期选择器。
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")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Cannot convert value of type 'Binding<Date?>' to expected argument type 'Binding<Date>'
Run Code Online (Sandbox Code Playgroud)
更不用说我将不得不弄清楚不透明的视图......
iOS 13
自定义绑定是您的朋友!此外,对于条件视图,您始终可以使用Group,这将使您的生活更轻松,并且将解决Opaque问题,因为它始终被视为Group您拥有的任何子视图。
struct OptionalDateView: 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 ?? Date()
}, set: {
self.date = $0
})
}
}
Run Code Online (Sandbox Code Playgroud)
iOS 14
struct OptionalDateView: View {
@Binding var date: Date?
var body: some View {
if date == nil {
Text("No date").onTapGesture {
date = Date()
}
} else {
DatePicker(selection: dateBinding, displayedComponents: .date) {
Text("Due Date")
}
}
}
private var dateBinding: Binding<Date> {
Binding {
date ?? Date()
} set: {
date = $0
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
304 次 |
| 最近记录: |