juzipaney 2024-02-25 20:40 采纳率: 25%
浏览 4
已结题

siwftUI当中@binding无法在ForEach当中使用

  • 写回答

3条回答 默认 最新

  • GISer Liu 2024-02-25 20:41
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    问题分析:
    在SwiftUI中,如果我们想要在ForEach中使用Binding数组,但是数组的元素是结构体并且实现了Identifiable协议时,会遇到编译错误。
    解决方案:
    要解决这个问题,我们可以通过创建一个绑定数组的包装器来实现。我们可以创建一个包装器来存储我们的结构体数组,并使用Binding将其包装起来,以便在ForEach中使用。
    具体步骤如下:

    1. 创建一个包装器结构体,该结构体具有一个属性来存储结构体数组,并使用Binding将其包装起来。
    2. 在ForEach中使用该包装器的绑定数组。
      下面是代码示例:
      swiftCopy code
      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()
      }
      }
      
      在这个示例中,我们首先创建了一个名为BindingArray的结构体,它包装了一个结构体数组,并提供了对该数组的Binding访问。然后,我们在ContentView中使用了这个BindingArray来遍历items数组,并在ForEach中使用Binding。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月6日
  • 已采纳回答 2月27日
  • 创建了问题 2月25日

悬赏问题

  • ¥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局部变量对蓝图不可见