SwiftUI:如何使用 ForEach 循环使用各种代码的各种结构?
Posted
技术标签:
【中文标题】SwiftUI:如何使用 ForEach 循环使用各种代码的各种结构?【英文标题】:SwiftUI: How to loop through the various structs with various codes, using ForEach? 【发布时间】:2020-05-16 09:39:28 【问题描述】:假设,我有三个名为“s001”、“s002”、“s003”的结构。是否可以使用 ForEach 循环来迭代这些结构,而不将它们附加到数组中?
在示例代码下方,仅循环一个结构 (s001)。是否可以使用“s00+(index)”之类的动态结构名称?
import SwiftUI
struct ContentView: View
var body: some View
ForEach((1...3), id: \.self) index in
AnyView(s001())
struct s001: View var body: some View Rectangle().foregroundColor(.red)
struct s002: View var body: some View Circle().foregroundColor(.blue)
struct s003: View var body: some View Ellipse().foregroundColor(.yellow)
struct ContentView_Previews: PreviewProvider
static var previews: some View
ContentView()
【问题讨论】:
【参考方案1】:使用AnyView
是可能的,但存在性能缺陷,因此对于所描述的场景,由于这样的结构不应该太多,适当的方法是使用类似 view-factory-builder 的函数,如下所示
struct S00ContentView: View
var body: some View
ForEach((1...3), id: \.self) index in
self.buildView(for: index)
func buildView(for id: Int) -> some View
Group
if id == 1
s001()
else if id == 2
s002()
else if id == 3
s003()
struct s001: View var body: some View Rectangle().foregroundColor(.red)
struct s002: View var body: some View Circle().foregroundColor(.blue)
struct s003: View var body: some View Ellipse().foregroundColor(.yellow)
【讨论】:
非常感谢,Asperi,但我想在我的应用程序中拥有多达 20 个不同的结构。所以这将是一段非常长的代码...... 好的,接受。 :))) 我只是在寻找更优雅的解决方案......以上是关于SwiftUI:如何使用 ForEach 循环使用各种代码的各种结构?的主要内容,如果未能解决你的问题,请参考以下文章
Swiftui 如何在 foreach 循环中对整行使用 Tap Gesture
如何在不使用swiftUI附带的幻灯片删除的情况下创建自定义删除按钮我没有使用列表,只是使用foreach循环
如何在 forEach 循环中删除一个项目,每个项目都有一个 delete btn。我将 swiftUI 与核心数据一起使用