gpt4 book ai didi

swift - 更新模型时不更新详细 View (使用列表)SwiftUI

转载 作者:行者123 更新时间:2023-12-03 18:04:36 27 4
gpt4 key购买 nike

我正在使用 列表 在主视图中显示模型。当我在详细 View 中更新模型时,它不会在详细 View 中更新。
当我不使用 List ,详细 View 已更新。我缺少什么 List ?

struct Person: Identifiable {
var id: UUID
var name: String
}

class PersonModel: ObservableObject {
@Published var persons: [Person] = [Person(id: UUID(), name: "Ege")]
}

struct PersonListView: View {

@StateObject private var personModel = PersonModel()

var body: some View {
NavigationView {
List {
ForEach(personModel.persons) { person in
NavigationLink(destination: PersonDetailView(person: person).environmentObject(personModel)) {
Text(person.name)
}
}
}
.navigationTitle("Persons")
}
}
}

struct PersonDetailView: View {

let person: Person
@EnvironmentObject var personModel: PersonModel

var body: some View {
VStack {
Text(person.name)

Button(action: {
let personIndex = personModel.persons.firstIndex(where: { $0.id == person.id })!
personModel.persons[personIndex].name = "Updated Name"
}) {
Text("Update")
}
}
.navigationTitle("Person Detail")
}
}
我用于列表的解决方法:
  • 使用 NavigationLink 的自定义绑定(bind)函数。

  • 示例代码:
    //1
    private func binding(for person: Person) -> Binding<Person> {
    let personIndex = personModel.persons.firstIndex(where: { $0.id == person.id }) ?? 0
    return $personModel.persons[personIndex]
    }
    //2
    NavigationLink(destination: PersonDetailView(person: binding(for: person)))
    //3
    @Binding var person: Person //DetailView
  • 使用另一个 @State在详细 View 中初始化为传递
    onAppear 方法中的模型。
  • 最佳答案

    这个问题似乎在 Xcode 13 Beta 中得到修复。

    关于swift - 更新模型时不更新详细 View (使用列表)SwiftUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66141387/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com