为什么会显示“尾随闭包传递给不接受闭包的‘Int’类型参数”?

4
我在 SwiftUI 项目的引导屏幕中添加了第二个 TabView,并且它抛出了一个错误,错误信息是:“传递给类型为'Int'的参数的尾随闭包不接受闭包”。你有什么想法吗?
TabView {
    ForEach(0 ..< onboardingData.count) { index in
        let element = onboardingData[index]
        OnboardingCard(onboardingItem: element)
    }
}

入职卡片:

fileprivate struct OnboardingCard: View {
    let onboardingItem: OnboardingItem
    var body: some View {
        VStack {
            Image(onboardingItem.imageName)
                .resizable()
                .frame(height: 320)
                .frame (maxWidth: .infinity)
            Text(onboardingItem.title)
                .font(.title)
                .foregroundColor(.black)
                .bold()
                .padding()
            Text(onboardingItem.description)
                .multilineTextAlignment(.center)
                .font(.body)
                .foregroundColor(.gray)
                .padding (.horizontal, 15)
        }
    }
}
        
struct OnboardingItem {
    let imageName: String
    let title: String
    let description: String
}

删除 0 后面的空格。 - mahan
你能提供一个 [mcve] 吗? - Sweeper
2
有点不相关,但为什么要使用基于索引的循环呢?实际上你并不需要这个索引。 - vadian
错误发生在哪一行? - Peter Schorn
@PeterSchorn,这里会抛出错误:“VStack {TabView {”对于TabView,在我创建仅用于启动屏幕应用程序的项目时可以工作,但是当我将其与现有项目集成时,它会抛出此错误。我猜想我的其他选项卡视图可能与选项卡栏有关,我想使用第一个选项卡栏作为底部选项卡栏,第二个选项卡栏作为启动屏幕。 - user10991969
显示剩余10条评论
2个回答

2

我刚刚运行了你的代码。它按预期工作。


确认遵循Identifiable协议。

struct OnboardingItem: Identifiable {
    var id: UUID = UUID()
    let imageName: String
    let title: String
    let description: String
}

这样做可以避免使用基于索引的循环。而是采用以下方式:
ForEach(onboardingData) { onboardingItem in
     OnboardingCard(onboardingItem: onboardingItem)
}

这不是问题所在。 - Peter Schorn
@mahan,还没有解决问题,非常感谢您的努力,但仍未解决问题。 - user10991969
@Skysoft13,你能否包含你使用TabView的代码/视图? - mahan
@mahan,这是在新项目中工作时出现的错误,但当我将其集成到我的现有项目中时,它会抛出此错误。在我的现有项目中,我还有其他Yabview,我不知道这是否与此有关? - user10991969

1
当我们在项目中将另一个TabView重命名为MyTabView时,问题得到解决,因为项目不接受两个名称相似的TabView。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接