绑定可选

时间:2020-05-25 02:15:47

标签: ios swift swiftui

给我一​​个可选的日期,并且希望能够显示日期选择器。

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>'

更不用说我将不得不找出不透明的视图...

1 个答案:

答案 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
        })
    }
}