【问题标题】:Multiple List with SwiftUISwiftUI 的多个列表
【发布时间】:2021-09-02 17:58:45
【问题描述】:

假设我有一个这样的数组数组:

var arrays = [["one", "two", "three", "Four"], ["four", "five", "six"]]

我的目标是为每个子数组的每个子数组创建一个列表,然后导航到下一个子数组。

Example 1: one -> (NavigationLink) two -> (NavigationLink) three -> (NavigationLink) Four. 

Example 2: four -> (NavigationLink) five -> (NavigationLink) six.

每个箭头是每个 List 之间的 NavigationLink。

这是我迄今为止尝试过的:

struct ContentView: View {

    let arrays = [["A", "B", "C", "D"], ["E", "F", "G", "H"]]

    var body: some View {
        NavigationView {
            List {
                ForEach(arrays, id: \.self) { item in
                    NavigationLink( destination: DestinationView(items: item)) {
                        Text(item.first!).font(.subheadline)
                    }
                }
            }
            .navigationBarTitle("Dash")
        }
    }
}

struct DestinationView : View {
    
    var items: [String]
    
    var body: some View {
        List {
            ForEach(items, id: \.self) { item in
                NavigationLink( destination: DestinationView(items: items)) {
                    Text(item).font(.subheadline)
                }
            }
        }
    }
}




     

【问题讨论】:

  • 在您的示例中,您有 DestinationView 链接到另一个 DestinationView。这是否意味着可能存在任意数量的数据级别?因为示例集只有 2 层深。
  • @jnpdx 是的。每个子数组不一定相等。你觉得我怎么能做到这一点?
  • 啊,我误解了。我仍然有点不清楚列表的每个步骤所需的输出是什么,但我给出了一个答案。如果您阐明每个阶段的意图,我们很乐意进行调整。

标签: ios arrays swift swiftui


【解决方案1】:

您可以通过在每次将数组传递给DestinationView时对数组进行切片来做到这一点

import SwiftUI

struct ContentView: View {

    let arrays = [["A", "B", "C", "D"], ["E", "F", "G", "H"]]

    var body: some View {
        NavigationView {
            List {
                ForEach(arrays, id: \.self) { item in
                    NavigationLink( destination: DestinationView(items: Array(item[1..<item.count]))) {
                        Text(item.first!).font(.subheadline)
                    }
                }
            }
            .navigationBarTitle("Dash")
        }
    }
}

struct DestinationView : View {
    
    var items: [String]
    
    var body: some View {
        List {
            if self.items.count > 0 {
                NavigationLink( destination: DestinationView(items: Array(items[1..<items.count]))) {
                    Text(items[0]).font(.subheadline)
                    }
            }
        }
    }
}

【讨论】:

  • 从 DestinationView 调用 DestinationView 是一种好习惯吗?我的意思是,这种方法有什么不好的吗?感谢您的回答顺便说一句
猜你喜欢
  • 1970-01-01
  • 2020-11-07
  • 2022-01-06
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多