Mvvm SwiftUI和Apollo IOS体系结构问题

Mvvm SwiftUI和Apollo IOS体系结构问题,mvvm,swiftui,apollo-ios,Mvvm,Swiftui,Apollo Ios,我目前正在使用Apollo Graphql客户端构建一个SwiftUI应用程序。我可以将项目(代理)列表加载到视图中,并使用NavigationLink在详细视图中查看列表项目。我甚至可以打开一个工作表来创建一个新代理或编辑一个代理,我只需将新的或编辑的项添加到ViewModel的列表中 我现在遇到的问题是,我已将联系人列表添加到“代理”项目(查询下方的视图),并且在“创建和编辑”工作表中,它必须在列表中显示联系人,而列表又可以从正在创建或编辑的代理添加、更新和删除。如果我向代理添加联系人,我将

我目前正在使用Apollo Graphql客户端构建一个SwiftUI应用程序。我可以将项目(代理)列表加载到视图中,并使用NavigationLink在详细视图中查看列表项目。我甚至可以打开一个工作表来创建一个新代理或编辑一个代理,我只需将新的或编辑的项添加到ViewModel的列表中

我现在遇到的问题是,我已将联系人列表添加到“代理”项目(查询下方的视图),并且在“创建和编辑”工作表中,它必须在列表中显示联系人,而列表又可以从正在创建或编辑的代理添加、更新和删除。如果我向代理添加联系人,我将如何在联系人列表中将其反映为for循环,该循环既不在ViewModel中,也不是@Published属性。我尝试了@State变量,但我遇到了很多循环问题:

=== AttributeGraph: cycle detected through attribute 1379680 ===
...
由于绘制视图时无法更新@State变量。如何设计此senario,在其中可以添加、编辑和删除代理工作表中的联系人,而不会导致重画问题,并且所有其他视图都会用新值更新

我在模型中尝试了一个单独的联系人列表,类似的AttributeGraph错误问题也会发生

query Agents {
    agents {
        ...AgentFragment
    }
}

fragment AgentFragment on Agent {
    agent_id
    user_id
    company
    description
    contacts {
        ...ContactFragment
    }
    created_at
}

fragment ContactFragment on AgentContact {
    contact_id
    agent_id
    first_name
    last_name
    email
    phone
    mobile
    created_at
}
我有一个视图模型类,它从api服务器获取数据,并在其中存储AgentFragment的数组

class AgentsModel: ObservableObject {
    @Published var agents = [AgentFragment]()
    @Published var agentEvent: AgentEvent = .None
    
    enum AgentEvent {
        case Loading
        case Loaded
        case None
        case Error(title: String, message: String)
    }
 
    func loadAgents(cachePolicy: CachePolicy) {
        self.agentEvent = .Loading
        Network.shared.apollo.fetch(query: AgentsQuery(), cachePolicy: cachePolicy) { result in
            switch result {
            case .success(let graphQLResult):
                if let errors = graphQLResult.errors {
                    ...
                } else {
                    guard let data = try? result.get().data else { return }
                    do {
                        let agents = try data.agents.compactMap { try AgentFragment(jsonObject: $0.jsonObject) }
                        self.addAgents(agents)
                    } catch {
                        ...HandleError
                    }
                }
                self.agentEvent = .Loaded
            case .failure(let error):
                ...HandleError
            }
        }
    }
...
}