gpt4 book ai didi

swift - 在 MVVM 中清除 Collection View 的正确方法

转载 作者:行者123 更新时间:2023-11-30 11:30:35 26 4
gpt4 key购买 nike

我有一个由 View 模型驱动的 Collection View 。当用户注销时,我想清除 View 模型和 Collection View 。但是,每当我在清除 View 模型时尝试调用 collectionView?.reload() 时,程序就会崩溃:当 Collection View 中只有 0 个部分时,请求第 6 部分中的项目数.

class ViewModel {

private var childVMs: [ChildViewModel]()

var numberOfSections { return childVMs.count }

func numberOfItems(inSection section: Int) {
return childVMs[section].numberOfItems
}

func clear() {
childVMs.removeAll()
}
...
}

class ViewController: UICollectionViewController {

let vm = ViewModel()

func logout() {
vm.clear()
collectionView?.reloadData()
}

override func numberOfSections(in collectionView: UICollectionView) -> Int {
return vm.numberOfSections
}

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return vm.numberOfItems(inSection: section)
}

...
}

我注意到,当程序崩溃时,numberOfSections(in) 按预期返回 0,并且 collectionView(_, numberOfItemsInSection) 甚至没有被调用。有什么想法可能出了问题吗?

最佳答案

因为您已经删除了所有 ChildViewModel,所以在调用函数 numberOfItems(inSection section: Int) 之前,childVMs 是空数组。它会使您的应用程序崩溃,因为您在空数组中获得一个元素:childVMs[section],childVMs.count 对于空数组是安全的。

关于swift - 在 MVVM 中清除 Collection View 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50300552/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com