ios 如何从Binding&lt;Date桥接?&gt;< Date>在SwiftUI中使用扩展绑定?

hec6srdp  于 2023-05-30  发布在  iOS
关注(0)|答案(1)|浏览(236)

上下文

我尝试使用BindingExtensionBinding<Date?>桥接到Binding<Date>。但是,我在下面的实现中遇到了一个问题:
每次在应用程序中使用Binding时,它都会崩溃,告诉我self.wrappedValue意外发现nil,即使我手动将.now分配给它,如果它是nil

编码

public extension Binding where Value == Date? {
    var adapter: Binding<Date> {
        Binding<Date>(
            get: {
                if self.wrappedValue == nil { self.wrappedValue = .now }
                return self.wrappedValue! // CRASH
            },
            set: { self.wrappedValue = $0 }
        )
    }
}

问题

  • self.wrappedValue在我之前手动设置为.now后,怎么可能是nil
dwbf0jvd

dwbf0jvd1#

您不希望在get期间更新该值,因此将其更改为

get: {
    guard let value = self.wrappedValue else { return .now }                
    return value
}

您当前的实现应该会给予您一个紫色警告
在视图更新期间修改状态,这将导致未定义的行为。
这很可能是坠机的原因
我总是非常认真地对待SwiftUI代码中的紫色警告,并直接更改错误代码。

相关问题