SwiftUI - 没有初始值的状态
Posted
技术标签:
【中文标题】SwiftUI - 没有初始值的状态【英文标题】:SwiftUI - State without an initial value 【发布时间】:2020-10-28 11:42:39 【问题描述】:我的视图中声明了一个状态
@State var selected: Bool = false
@State var selectedPerson: Person
当从视图中选择“Person”时,会有一个回调将“selected”状态设置为 true,并设置被选中的人:
MapView(viewModel: MapViewModel(people: viewModel.people)) value in
selectedPerson = viewModel.getPersonWith(name: value.title)
selected = true
当所有这些都设置好后,它会触发这样的 NavigationLink:
NavigationLink(destination: PersonDetailsView(viewModel: PersonViewModel(person: selectedPerson)), isActive: self.$selected)
EmptyView()
.hidden()
一切正常,但我必须在初始化结构之前将默认值设置为“selectedPerson”状态,即使没有选择任何人。有没有办法绕过这个,而不给“selectedPerson”状态一个默认的“虚拟”值。 谢谢:)
【问题讨论】:
只需将其设为可选@State var selectedPerson: Person?
并使用其他 NavigationLink 初始化程序,该初始化程序将绑定到可选值。您也可以删除。完全选中
@LuLuGaGa 你能给我举个例子吗,应用程序崩溃了,因为它从可选项接收到一个 nil 值
【参考方案1】:
你需要让初始状态可选,比如
@State var selectedPerson: Person?
但是你也必须在所有使用它的地方处理这个可选的,比如
if nil != selectedPerson
NavigationLink(destination:
PersonDetailsView(viewModel: PersonViewModel(person: selectedPerson!)), // << !!
isActive: self.$selected)
EmptyView()
.hidden()
【讨论】:
以上是关于SwiftUI - 没有初始值的状态的主要内容,如果未能解决你的问题,请参考以下文章