List 快捷方式(表单)呈现列表不';我第二次不工作了

List 快捷方式(表单)呈现列表不';我第二次不工作了,list,swiftui,dispatch-async,pass-through,bindable,List,Swiftui,Dispatch Async,Pass Through,Bindable,我使用的是Beta4Xcode,只是有一个从主视图以模式显示的字符串项列表 var body: some View { NavigationView { List { Section() { Button(action: { self.shouldShowModal = true s

我使用的是Beta4Xcode,只是有一个从主视图以模式显示的字符串项列表

    var body: some View {
        NavigationView {
            List {
                Section() {
                    Button(action: {
                        self.shouldShowModal = true
                        self.areasModal = true
                        self.accountsModal = false
                    }) {
                        Text("Areas")
                    }
                }
            }
        }
        .sheet(isPresented: $shouldShowModal, onDismiss: {
            // on dismiss
        }) {
            if self.accountsModal {
                Text("Accounts")
            } else if self.areasModal {
                AreaListView()
            } 
        }
    }
区域列表视图中
我有以下内容

class MockModel: BindableObject {

    struct MockItem: Identifiable {
        var id: String
    }

    var willChange = PassthroughSubject<Void, Never>()

    var items: [MockItem] = [] {
        willSet {
            self.willChange.send()
        }
    }

    init() {
        self.performFetch()
    }

    func performFetch() {
        DispatchQueue.main.async { [weak self] in
            self?.items = [MockItem(id: "first"), MockItem(id: "fjirst"), MockItem(id: "fiklkrst"), MockItem(id: "fijlkrst")]
        }
    }

    deinit {
        print("deinit")
    }
}

当我第一次打开区域时,它工作正常,但第二次它停止填充列表。然后我观察到从
performFetch()
中删除了async,一切正常。我还观察到,
deinit
不是在模式(图纸)关闭(通过下拉)时调用的,而是在我第二次打开区域列表视图时调用的。有人能解释一下为什么调度异步会导致功能不正常,以及为什么在第二次打开AreasListView时会发生初始化吗?非常感谢,

p、 另外,当向我的模型添加dispatch async时,我在控制台日志中看到以下错误

=== AttributeGraph: cycle detected through attribute 18 ===
=== AttributeGraph: cycle detected through attribute 18 ===
=== AttributeGraph: cycle detected through attribute 104 ==
我还尝试了以下不使用调度队列的方法

    func getItem() -> Future<[MockItem], Never> {
        return Future { promise in
            let t = [MockItem(id: "first"), MockItem(id: "fjirst"), MockItem(id: "fiklkrst"), MockItem(id: "fijlkrst")]
            promise(.success(t))
        }
    }

    func performFetch() {
        temp = getItem().eraseToAnyPublisher().receive(on: RunLoop.main)
            .sink(receiveValue: { [weak self] (items) in

                self?.items = items
            })
    }
func getItem()->Future{
回报未来{承诺未来}
设t=[MockItem(id:“first”)、MockItem(id:“fjirst”)、MockItem(id:“fiklkrst”)、MockItem(id:“fijlkrst”)]
承诺(成功(t))
}
}
func performFetch(){
temp=getItem().eraseToAnyPublisher().receive(在:RunLoop.main上)
.sink(receiveValue:{[weak self](项)位于
self?.items=项目
})
}

您能展示shouldshowmodel的声明吗?它是一个布尔@状态,首字母为False,同样的问题,您找到了解决方案吗?您是否尝试过最新的beta版,它在那里得到了修复。
    func getItem() -> Future<[MockItem], Never> {
        return Future { promise in
            let t = [MockItem(id: "first"), MockItem(id: "fjirst"), MockItem(id: "fiklkrst"), MockItem(id: "fijlkrst")]
            promise(.success(t))
        }
    }

    func performFetch() {
        temp = getItem().eraseToAnyPublisher().receive(on: RunLoop.main)
            .sink(receiveValue: { [weak self] (items) in

                self?.items = items
            })
    }