快速避免索引超出范围错误

Posted

技术标签:

【中文标题】快速避免索引超出范围错误【英文标题】:Avoid Index Out Of Range error in swift 【发布时间】:2018-08-10 11:29:53 【问题描述】:

在我的 UICollectionView 中,如果没有数据,我会尝试返回 1 项(以便设置一个空单元格)。 代码如下:

    var movies = [Movies]()

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    if movies.count == 0 
        return 1
     else 
        return movies.count
    

我收到致命错误:索引超出范围。我知道,这样我试图访问 index[1] 下的元素,这是不可能的,因为该元素不存在,这就是这个错误的原因。

但是在这种情况下我该如何避免呢?

【问题讨论】:

在这个函数中你说...如果我没有项目...告诉集合视图我有 1 个项目。如果您只是在这里返回movies.count,您的问题就会消失。另外......你的崩溃不在这里......它在其他地方。 【参考方案1】:

当您返回 1 count in numberOfItemsInSection 时,您需要在下标之前检查cellForItemAt 中的数组是否为空。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    if movies.isEmpty 
        //return your empty cell
    
    else 
        //access array element and return cell
    

【讨论】:

哦,我在声明我的 2 个单元格,然后作为回报,我想: return movies.count == 0 ? emptyCell : cell 我想知道为什么这不起作用,但无论如何.. 你的案例工作了非常感谢! @EmmaVagradyan 欢迎朋友 :) @EmmaVagradyan 只是想知道,如果您使用的是 return movies.count == 0 ? emptyCell : cell,那么它也应该可以工作。 @KamaldeepsinghBhatia 不,不要在那个地方使用三元运算符,但你可以在 numberOfItemsInSection 使用它,就像这样 return movies.isEmpty ? 1 : movies.count 哦,是的...谢谢@NiravD

以上是关于快速避免索引超出范围错误的主要内容,如果未能解决你的问题,请参考以下文章

重新加载 ViewController 中的 tableview 让我在索引路径的 cellforRow 中出现“致命错误:索引超出范围”

快速单击表格视图单元格时显示索引超出范围或返回主屏幕

Swift 错误:索引超出范围

准备转场时致命错误索引超出范围

Python - 索引错误 - 列表索引超出范围

UICollectionView 给出“索引超出范围”错误