代码之家  ›  专栏  ›  技术社区  ›  PoolHallJunkie

SwiftUI-从嵌套子视图更改模型

  •  1
  • PoolHallJunkie  · 技术社区  · 3 年前

    我有个懒虫。 我的主视图有LazyVStack,它有一个viewModel。

    @StateObject private var model = ViewModel()
    

    LazyVStack {
        ForEach(model.items) { item in
           CustomView(item: item)
        }
    }
    

    每个自定义视图由另外两个子视图CustomView1和CustomView2组成。 CustomView2有一个按钮,我想在其中翻转单元格。

    但是,此时我的自定义视图有这些项的新副本(struct)。 返回到模型以实现以下目标的最佳方法是什么:

    .onTapGesture {
       model.flipItem(item)
    }
    
    • 使ViewModel共享单例以便于访问?
    • 更好的选择?
    1 回复  |  直到 3 年前
        1
  •  1
  •   aheze But I'm Not A Wrapper Class    3 年前

    我会在你的 Item 存储卡是否翻转的结构:

    struct Item {
        var ifFlipped = false
        ...
    }
    model.items = [Item(), Item()]
    

    model.items.indices Binding

    LazyVStack {
        ForEach(model.items.indices, id: \.self) { index in
           CustomView(item: $model.items[index]) /// this will be a Binding<Item>
        }
    }
    

    CustomView / CustomView1 需要看起来像这样。

    struct CustomView: View {
        @Binding var item: Item
        
        var body: some View {
            CustomView1(item: $item) /// pass Binding down
        }
    }
    
    struct CustomView1: View {
        @Binding var item: Item
        
        var body: some View {
            Text("Hi")
                .onTapGesture {
                    item.isFlipped.toggle()
                }
        }
    }