首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在ForEach循环中增加SwiftUI中的状态?

如何在ForEach循环中增加SwiftUI中的状态?
EN

Stack Overflow用户
提问于 2020-08-12 14:40:37
回答 1查看 794关注 0票数 0

我需要增加genNum变量并将其传递给ForEach循环中的另一个结构。我的代码编译正确,但无法在模拟和画布中预览它。获取“无法预览此文件”。我收到的另一个错误是"RemoteHumanReadableError:操作无法完成。(BSServiceConnectionErrorDomain错误3.)“。

BSServiceConnectionErrorDomain (3):==BSErrorCodeDescription: OperationFailed

代码语言:javascript
复制
import SwiftUI

@available(iOS 14.0, *)
struct CategoryView: View {
    @State var genNum: Int = -1
    
    var categories: [Int: [PokemonData]] {
        Dictionary(
            grouping: pokemonData,
            by: { $0.generation }
        )
    }
    
    var columns: [GridItem] = [
        GridItem(.fixed(170)),
        GridItem(.fixed(170))
    ]

    var body: some View {
        NavigationView {
            ScrollView {
                LazyVGrid(columns: columns) {
                    ForEach(categories.keys.sorted(), id: \.self) { key in
                        CategoryCard(genNum: self.increment()) // <--- Having problem with this line
                    }
                }
                AllCard()
                    .padding(.horizontal, 15)
                    .padding(.bottom, 20)
            }
            .navigationTitle("Categories")
        }
    }
    
    // Function to increment the state value
    func increment() -> Int {
        self.genNum += 1
        let i = genNum
        return i
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-08-12 15:04:07

如果您只想将值从0传递给CategoryCard()初始化程序,则可以使用enumerated()函数。该函数接受一个数组作为输入,并返回一个元组数组,其中第一个项是数组索引,第二个项是原始数组中的元素。

例如,此代码:

代码语言:javascript
复制
let array = ["zero", "one", "two", "three"]

array.enumerated().forEach { (index, string) in
    print (index, string)
}

产出如下:

代码语言:javascript
复制
0 zero
1 one
2 two
3 three

这样您就可以像这样重写代码:

代码语言:javascript
复制
            LazyVGrid(columns: columns) {
                
                ForEach(categories.keys.sorted().enumerated(), id: \.self) { (index, key) in
                    CategoryCard(genNum: index) // <--- Having problem with this line
                }
            }

(免责声明:我还没有使用SwiftUI,所以我不完全清楚ForEach在您的LazyGrid中正在做什么)

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63378919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档