代码之家  ›  专栏  ›  技术社区  ›  Lorenzo Fiamingo

为什么DatePicker在Date变为零时崩溃?

  •  0
  • Lorenzo Fiamingo  · 技术社区  · 5 年前

    我不明白为什么会崩溃。我使用的是ios14和xcode12.0beta4。 如果我删除了日期选择器,它可以正常工作。有什么想法吗?

    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()
                    }
                }
            }
        }
    }
    
    0 回复  |  直到 5 年前
        1
  •  0
  •   rraphael    5 年前

    这其实很奇怪。。。

    Binding<Date>($myDate)

    这种行为似乎发生在 State 是一个 Date (带一个 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
    

    编辑:

    这似乎只与国家有关:

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