上下文
我尝试使用Binding
的Extension
从Binding<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
?
1条答案
按热度按时间dwbf0jvd1#
您不希望在
get
期间更新该值,因此将其更改为您当前的实现应该会给予您一个紫色警告
在视图更新期间修改状态,这将导致未定义的行为。
这很可能是坠机的原因
我总是非常认真地对待SwiftUI代码中的紫色警告,并直接更改错误代码。