如何解决SwiftUI:导航在带有部分的列表中无法正常工作
我正在尝试为我声明的自定义枚举的每种不同情况构建一个带有Section的List。该列表显示并正常工作,并且模型的所有实例在各自的部分中均按案例进行分组,但是每当我尝试导航到详细信息视图时,它只会显示一秒钟,然后自动将我发送回列表,就像我按下后退按钮一样。这是我使用的代码:
import SwiftUI
enum Enum: String,Identifiable,CaseIterable {
var id: UUID { UUID() }
case case1 = "Case 1"
case case2 = "Case 2"
case case3 = "Case 3"
}
struct ProvaView: View {
func listaModelliPerCaso(caso: Enum) -> [Model] {
let array = dm.models.filter { $0.caso == caso }
return array
}
@Observedobject var dm: DataManager
var body: some View {
NavigationView {
List {
ForEach(Enum.allCases) { caso in
Section(header: Text(caso.rawValue)) {
ForEach(listaModelliPerCaso(caso: caso)) { model in
NavigationLink(
destination: ProvaDetailView(dm: dm,modello: model)) {
Text(model.nome)
}
}
}
}
}
.navigationBarTitle(Text("Models List"),displayMode: .inline)
}
}
}
它是这样的:simulator screenshot
如果我使用类而不是枚举,则为每个个案创建一个实例并将其存储到数组中,然后使用ForEach调用它,问题就消失了。我真的很困惑为什么当它是枚举时它为什么表现不同(并以这种奇怪的方式)。
非常感谢您提供的任何帮助!
解决方法
问题出在您的枚举的再生ID(即UUID()
)上,因此对allCases
的任何调用都会创建新的节并破坏/重新创建完整的List
。
解决方案是改用持久性的东西,例如rawValue
:
enum Enum: String,Identifiable,CaseIterable {
var id: String { self.rawValue } // << here !!
case case1 = "Case 1"
case case2 = "Case 2"
case case3 = "Case 3"
}
在Xcode 12.1 / iOS 14.1上使用复制代码进行了测试
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。