2016-08-16 77 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已經有效。