繁体   English   中英

为什么我在 SwiftUI 中更改了他后发布的 Array 没有更改?

[英]Why published Array does not change after I change him in SwiftUI?

所以,这只是我项目中的一个示例代码。 在调用 SecondView 之后,我想将数组中的名称更改为“LoL”,并显示它们。 为什么 init() 不会改变我的数组? 由于它不显示新名称

struct Person: Identifiable {
let id = UUID()
var name: String
var index: Int

}

class User: ObservableObject {
@Published var array = [Person(name: "Nick", index: 0),
                        Person(name: "John", index: 1)
]
}

struct ContentView: View {

@ObservedObject var user = User()

var body: some View {
    VStack {
        ForEach (user.array) { row in
            SecondView(name: row.name, index: row.index)
        }
    }
}
}

struct SecondView: View {

@ObservedObject var user = User()
var name = ""
var index = 0

init() {
    user.array[index].name = "LoL"
}

init(name: String, index: Int) {
    self.name = name
    self.index = index
}

var body: some View {
    VStack {
        Text(name)
    }
}
}

这是因为您没有在SecondView调用init()方法,而是在调用init(name:, index:) 请注意您如何在FirstView的迭代(即ForEach )循环中使用SecondView初始值FirstView

此外,您的第二个视图显示了通过初始化程序init(name:index:)传递的init(name:index:) ,而不是user数组中的名称。 因此,如果您想将name更改为某些内容,请在调用此init(name:index:)之前执行此操作,并从用户数组中传递名称。

您可以在第一个视图中执行此操作。

struct ContentView: View {

    @ObservedObject var user = User()

    init() {
        user.array[0].name = "LoL"

    }
    var body: some View {

        VStack {
            ForEach (user.array) { row in
                SecondView(name: row.name, index: row.index)
            }
        }
    }
}

请注意,它现在将第一个名称更改为Lol因为我们在ContentView的初始值设定项中更改了它,然后使用相同的修改后的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM