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

SwiftUI嵌套ForEach引发编译器异常,求解决方案

SwiftUI多输出节点连接线绘制问题

我正在实现一个可相互连接的图形系统,每个图形节点可以连接到一个或多个下游节点。

数据模型

最初用类实现模型,通过直接引用关联节点,运行正常。但为了支持JSON序列化,我改为用ID数组替代直接引用,数据结构如下:

模型容器

@Observable class GadgetModel: Encodable, Identifiable {
    var gadgets = [GadgetNode]()
}

节点定义

@Observable class GadgetNode : Identifiable, Codable, Hashable {
    public var gadgetType: GadgetType = .unassigned
    public var id: Int = 0             // GadgetNodes 和 GadgetViews 共享同一ID

    var input1: GadgetNode?
    var output1: GadgetNode?
    var inputs: [Int] = []   // 用节点ID替代直接引用
    var outputs: [Int] = []
    // 注:省略position属性(用于绘制位置)和其他无关实现
}

单输出版本(可正常运行)

之前单输出的版本,通过直接引用output1可以正常绘制连接线,代码如下:

ZStack {
    ForEach(gadgetModel.gadgets) { gadget in
        getGadgetView(gadget: gadget)
        let myPosition = gadget.position
        if let outputPosition = gadget.output1?.position {
            DataFlowLine(
                from: myPosition,
                to: outputPosition
            )
            .animation(.easeInOut, value: outputPosition)
        }
    }
}

多输出版本的问题

改成用outputs数组存储下游节点ID后,嵌套ForEach的代码无法编译,报错:Static method 'buildExpression' requires that 'some View' conform to 'AccessibilityRotorContent'。

我尝试将图形绘制和连接线绘制拆分,代码如下(注:原代码存在语法错误,已修正逻辑):

ZStack {
    // 绘制图形节点
    ForEach(gadgetModel.gadgets, id: \.self) { gadget in
        getGadgetView(gadget: gadget)
    }
    // 为每个节点绘制到下游节点的连接线
    ForEach(gadgetModel.gadgets, id: \.self) { gadget in
        let myPosition = gadget.position
        Group {
            ForEach(gadget.outputs, id: \.self) { outputId in
                if let targetGadget = gadgetModel.gadgets.first(where: { $0.id == outputId }) {
                    let outputPosition = targetGadget.position
                    DataFlowLine(
                        from: myPosition,
                        to: outputPosition
                    )
                }
            }
        }
    }
}

拆分后又遇到需要绑定或代码复杂度超标的报错,试过用Group包裹但无效,想请教是否需要使用@ViewBuilder,以及可行的解决思路。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:35:05