SwiftUI - 没有初始值的状态
SwiftUI - State without an initial value
我有一个在我看来声明的状态
@State var selected: Bool = false
@State var selectedPerson: Person
当从视图中选择“人”时,会出现一个回调,将“已选择”状态设置为 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?
但是你也必须在所有使用它的地方处理这个可选的,比如
if nil != selectedPerson {
NavigationLink(destination:
PersonDetailsView(viewModel: PersonViewModel(person: selectedPerson!)), // << !!
isActive: self.$selected) {
EmptyView()
}.hidden()
}
我有一个在我看来声明的状态
@State var selected: Bool = false
@State var selectedPerson: Person
当从视图中选择“人”时,会出现一个回调,将“已选择”状态设置为 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?
但是你也必须在所有使用它的地方处理这个可选的,比如
if nil != selectedPerson {
NavigationLink(destination:
PersonDetailsView(viewModel: PersonViewModel(person: selectedPerson!)), // << !!
isActive: self.$selected) {
EmptyView()
}.hidden()
}