swiftUI当中无法使用@binding数组,提示错误数组里面对象是一个struct,并且实现了Identifiable
siwftUI当中@binding无法在ForEach当中使用
swiftUI当中无法使用@binding数组,提示错误数组里面对象是一个struct,并且实现了Identifiable
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- GISer Liu 2024-02-25 20:41关注
该回答引用自GPT-3.5,由博主GISer Liu编写:
问题分析:
在SwiftUI中,如果我们想要在ForEach中使用Binding数组,但是数组的元素是结构体并且实现了Identifiable协议时,会遇到编译错误。
解决方案:
要解决这个问题,我们可以通过创建一个绑定数组的包装器来实现。我们可以创建一个包装器来存储我们的结构体数组,并使用Binding将其包装起来,以便在ForEach中使用。
具体步骤如下:- 创建一个包装器结构体,该结构体具有一个属性来存储结构体数组,并使用Binding将其包装起来。
- 在ForEach中使用该包装器的绑定数组。
下面是代码示例:
swiftCopy code
在这个示例中,我们首先创建了一个名为BindingArray的结构体,它包装了一个结构体数组,并提供了对该数组的Binding访问。然后,我们在ContentView中使用了这个BindingArray来遍历items数组,并在ForEach中使用Binding。import SwiftUI // 创建一个包装器结构体来存储结构体数组 struct BindingArray<Element>: RandomAccessCollection { private var array: [Element] var bindings: [Binding<Element>] init(_ array: [Element]) { self.array = array self.bindings = array.map { Binding.constant($0) } } var startIndex: Int { array.startIndex } var endIndex: Int { array.endIndex } subscript(index: Int) -> Element { get { array[index] } set { array[index] = newValue } } subscript(index: Int) -> Binding<Element> { bindings[index] } } // 示例结构体 struct Item: Identifiable { let id: UUID var name: String } struct ContentView: View { @State private var items: [Item] = [ Item(id: UUID(), name: "Item 1"), Item(id: UUID(), name: "Item 2"), Item(id: UUID(), name: "Item 3") ] var body: some View { VStack { ForEach(BindingArray(items), id: \.id) { $item in TextField("Enter item name", text: $item.name) } } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 35114 SVAC视频验签的问题
- ¥15 impedancepy
- ¥15 在虚拟机环境下完成以下,要求截图!
- ¥15 求往届大挑得奖作品(ppt…)
- ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
- ¥50 浦育平台scratch图形化编程
- ¥20 求这个的原理图 只要原理图
- ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
- ¥20 微信的店铺小程序如何修改背景图
- ¥15 UE5.1局部变量对蓝图不可见