2016-08-16 41 views
1

我有一个数组,其中包含UIViews(单元格),该数组开头为空。我定当一个功能是通过不同的阵列循环发射它的值:当我将一个元素插入数组时,数组索引超出范围

cells = [cell0, cell1, cell2, cell3, cell4] 

// Code in function ↓ 

var cellAnimationArray: [NPFCarouselCell] = [] 

for cell in self.cells { 
    if cell.frame == farLeftFrame { 
     cellAnimationArray.insert(cell, at: 0) 
    } else if cell.frame == leftFrame { 
     cellAnimationArray.insert(cell, at: 1) 
    } else if cell.frame == centerFrame { 
     cellAnimationArray.insert(cell, at: 2) 
    } else if cell.frame == rightFrame { 
     cellAnimationArray.insert(cell, at: 3) 
    } else if cell.frame == farRightFrame { 
     cellAnimationArray.insert(cell, at: 4) 
    } else { 
     print("Frame does not exist!") 
     print(cell.frame) 
     return 
} 

当我站上罚球线cellAnimationArray.insert(cell, at: 4),应用程序崩溃与:

fatal error: Array index out of range 

为什么我会得到一个彻头彻尾的索引错误,当我插入一个项目到数组中?

+0

@tktsubota。我使用数组的方式我必须知道哪个元素是在哪里。这就是为什么我使用插入。 –

+2

您可以'在索引4处插入空数组。它将如何知道如何填充0 ... 3? – Alexander

+0

@AlexanderMomchliov。问题是,例如,索引3未分配,因此索引4不存在? –

回答

3

您的错误消息告诉您,在为4插入足够的元素以成为有效索引之前,您正在调用insert(cell, at:4)。这意味着self.cells中的项目顺序是这样的,即在插入之前在0到3之前击中该行。但是,除非已经有0到3之间的东西,否则不能在4处插入。

当您使用一个已经包含多个项目的数组,您可以避免这种情况,因为索引4已经有效。