You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI嵌套ForEach循环报错:无法将[Document]转为Binding<C>

嵌套ForEach循环报错:Cannot convert value of type '[Document]' to expected argument type 'Binding'

问题描述

在嵌套ForEach循环中触发错误:Cannot convert value of type '[Document]' to expected argument type 'Binding'。原本计划逐层遍历数组以访问内部属性,但编译器误报了Binding相关错误,同时出现Generic parameter 'C' could not be inferred提示。

相关代码

Model

import Foundation

struct Publisher: Identifiable {
    var id = UUID()
    var username: String
    var documents: [Document]
}

struct Document: Identifiable {
    var id = UUID()
    var title: String
    var description: String
    var username: String
    var userImage: String
    var text: String
    var date: Date
}

ViewModel

import Foundation

final class PublisherViewModel: ObservableObject {
    @Published var publishers = [
        Publisher(
            username: "blah",
            documents: [Document(
                title: "Blah Strikes Again",
                description: "How Blahs Work",
                username: "blah",
                userImage: "blah",
                text: "Enim porro et eius et. Recusandae nisi aperiam tenetur dolore ut ratione. Repudiandae quas sit est molestiae exercitationem non sequi et.",
                image: "",
                audio: "",
                video: "",
                date: Date())
    ]
}

View

import SwiftUI

struct PublisherDetailView: View {
   
    @ObservedObject var viewModel = PublisherViewModel()
    
    var body: some View {
       HStack {
          ForEach(viewModel.publishers) { publisher in
              ForEach(publisher.documents) { document in // <-- **error here**
                  Text(document.content)
                      .padding()
                  Spacer()
                }
            }
        }
    }
}

问题原因及解决方法

你遇到的Binding错误属于编译器误报,根源是代码中存在多处语法和逻辑错误:

  1. 属性不匹配:View中访问document.content,但Document结构体仅定义了text属性,不存在content;
  2. 结构体初始化参数冗余:ViewModel中初始化Document时传入了image、audio、video参数,但Document结构体未定义这些属性;
  3. 语法结构未闭合:ViewModel中publishers数组、Publisher及Document的初始化都缺少闭合的括号/大括号,导致代码无效。

修复这些错误后,ForEach的嵌套遍历会正常工作(因为Publisher和Document都遵循Identifiable协议,SwiftUI的ForEach支持直接遍历这类数组)。

修正后的完整代码

修正后的Model

import Foundation

struct Publisher: Identifiable {
    var id = UUID()
    var username: String
    var documents: [Document]
}

struct Document: Identifiable {
    var id = UUID()
    var title: String
    var description: String
    var username: String
    var userImage: String
    var text: String
    var date: Date
}

修正后的ViewModel

import Foundation

final class PublisherViewModel: ObservableObject {
    @Published var publishers = [
        Publisher(
            username: "blah",
            documents: [Document(
                title: "Blah Strikes Again",
                description: "How Blahs Work",
                username: "blah",
                userImage: "blah",
                text: "Enim porro et eius et. Recusandae nisi aperiam tenetur dolore ut ratione. Repudiandae quas sit est molestiae exercitationem non sequi et.",
                date: Date()
            )]
        )
    ]
}

修正后的View

import SwiftUI

struct PublisherDetailView: View {
    @ObservedObject var viewModel = PublisherViewModel()
    
    var body: some View {
        HStack {
            ForEach(viewModel.publishers) { publisher in
                ForEach(publisher.documents) { document in
                    Text(document.text)
                        .padding()
                    Spacer()
                }
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者somethingsomethingswift

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:55:25