gpt4 book ai didi

ios - SwiftUI 中的@Binding 和 ForEach

转载 作者:搜寻专家 更新时间:2023-11-01 05:54:34 25 4
gpt4 key购买 nike

我无法理解如何在 SwiftUI 中将 @BindingForEach 结合使用。假设我想从一个 bool 值数组中创建一个 Toggle 列表。

struct ContentView: View {
@State private var boolArr = [false, false, true, true, false]

var body: some View {
List {
ForEach(boolArr, id: \.self) { boolVal in
Toggle(isOn: $boolVal) {
Text("Is \(boolVal ? "On":"Off")")
}
}
}
}
}

我不知道如何将数组内 bool 值的绑定(bind)传递给每个 Toggle。上面的代码给出了这个错误:

Use of unresolved identifier '$boolVal'

好吧,这对我来说很好(当然)。我试过:

struct ContentView: View {
@State private var boolArr = [false, false, true, true, false]

var body: some View {
List {
ForEach($boolArr, id: \.self) { boolVal in
Toggle(isOn: boolVal) {
Text("Is \(boolVal ? "On":"Off")")
}
}
}
}
}

这次的错误是:

Referencing initializer 'init(_:id:content:)' on 'ForEach' requires that 'Binding' conform to 'Hashable'

有没有办法解决这个问题?

最佳答案

⛔️ 不要使用错误的做法!

大多数答案(包括@kontiki 接受的答案)方法导致引擎在每次更改时重新呈现整个 UI,Apple 在 wwdc2021 提到这是一种不好的做法。 (大约时间 7:40)


✅ swift 5.5

从这个版本的 swift 开始,您可以通过传入可绑定(bind)项来直接使用绑定(bind)数组元素,例如:

enter image description here

⚠️ 注意 iOS 14 及以下版本不支持 Swift 5.5,但至少检查操作系统版本,不要继续这种不良做法!

关于ios - SwiftUI 中的@Binding 和 ForEach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57340575/

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