【问题标题】:SwiftUI - State without an initial valueSwiftUI - 没有初始值的状态
【发布时间】: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 值

标签: swiftui state default


【解决方案1】:

你需要让初始状态可选,比如

@State var selectedPerson: Person?

但是你也必须在所有使用它的地方处理这个可选的,比如

if nil != selectedPerson {
   NavigationLink(destination: 
      PersonDetailsView(viewModel: PersonViewModel(person: selectedPerson!)), // << !!
                              isActive: self.$selected) {
      EmptyView()
   }.hidden()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2019-05-08
    • 1970-01-01
    • 2020-05-07
    相关资源
    最近更新 更多