【问题标题】:Why DatePicker crash when Date becomes nil? [duplicate]为什么 DatePicker 在 Date 变为 nil 时会崩溃? [复制]
【发布时间】:2020-08-21 10:24:19
【问题描述】:

我不明白为什么会崩溃。我正在使用 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()
                }
            }
        }
    }
}

【问题讨论】:

标签: swift swiftui


【解决方案1】:

这其实很奇怪……

Binding&lt;Date&gt;($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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 2012-04-20
    • 1970-01-01
    • 2011-08-04
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多