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 - 没有初始值的状态的主要内容,如果未能解决你的问题,请参考以下文章

是否所有 @Published 变量都需要在 SwiftUI 的视图模型中具有初始值?

如何在 SwiftUI 中延迟 @State 变量的设置值

SwiftUI 中的可选状态或绑定

SwiftUI @State 变量没有被取消初始化

更改状态栏颜色 SwiftUI 没有 UIHosting

SwiftUI 分段选择器默认状态为 nil