gpt4 book ai didi

binding - 为什么我的 SwiftUI 列表没有更新?

转载 作者:行者123 更新时间:2023-12-04 08:38:41 24 4
gpt4 key购买 nike

我使用 SwiftUI 列表并通过绑定(bind)将字符串传递给不同的 View 。
但是当我回去时,列表没有更新。
这是我的例子:

struct ContentView: View {
@State private var list = ["a", "b", "c"]
@State private var item: String?
@State private var showSheet = false


var body: some View {
List {
ForEach(list.indices) { i in
Button(action: {
item = list[i]
showSheet.toggle()
}) {
Text(list[i])
}


}
}
.sheet(isPresented: $showSheet, content: {
DetailView(input: $item)
})
}
}
和详细页面:
struct DetailView: View {
@Binding var input: String?

var body: some View {
Text(input ?? "")
.onDisappear{
print("changed to changed")
input = "changed"
}
}
}
我想要实现的是,在我单击的每个项目上,我都会看到详细信息页面。之后,该元素应更改为“已更改”。但这不会发生。为什么?

最佳答案

你更新item但不是 list ,所以看不到任何结果。这是更正的变体 - 存储选定的索引并按索引传递绑定(bind)到列表。
使用 Xcode 12.1/iOS 14.1 测试

struct ContentView: View {
@State private var list = ["a", "b", "c"]
@State private var item: Int?


var body: some View {
List {
ForEach(list.indices) { i in
Button(action: {
item = i
}) {
Text(list[i])
}
}
}
.sheet(item: $item, content: { i in
DetailView(input: $list[i])
})
}
}

extension Int: Identifiable {
public var id: Self { self }
}

struct DetailView: View {
@Binding var input: String

var body: some View {
Text(input)
.onDisappear{
print("changed to changed")
input = "changed"
}
}
}

关于binding - 为什么我的 SwiftUI 列表没有更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64664470/

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