为什么当Date为零时DatePicker崩溃?

问题描述

我不明白为什么这会崩溃。我正在使用ios14和XCode 12.0 beta 4。 如果删除DatePicker,它将正常运行。有什么想法吗?

struct MyView: View {
    
    @State private var myDate: Date?
    
    var body: some View {
        Form {
            if let selection = Binding<Date>($myDate) {
                DatePicker("myDate",selection: selection)
                Button("Delete myDate") {
                    myDate = nil
                }
            } else {
                Button("Add myDate") {
                    myDate = Date()
                }
            }
        }
    }
}

解决方法

这实际上很奇怪...

Binding<Date>($myDate)返回一个绑定,其日期设置为“ 2001年1月1日凌晨1:00”。

StateDate(使用String时,它会按预期返回nil的情况出现这种情况:

struct A {
    @State var date: Date? = nil
    @State var str: String? = nil

    var dateBinding: Binding<Date>? {
        Binding($date)
    }

    var stringBinding: Binding<String>? {
        Binding($str)
    }
}

A().dateBinding // not nil
A().dateBinding!.wrappedValue // "Jan 1,2001 at 1:00 AM"

A().stringBinding // nil

在不使用属性包装的情况下,它似乎可以很好地工作:

let stateDate = State<Date?>(initialValue: nil)
Binding<Date>(stateDate.projectedValue) // nil

这可能是Xcode 12 beta版的问题。

编辑:

这似乎仅与国家有关:

struct A {
    @State var date1: Date? = nil
}
A().date1 // Jan 1,2001 at 1:00 AM"

State<Date?>(initialValue: nil).wrappedValue // nil