2016-06-29 30 views
0

我有此數組:迅速:改變數組的內容給我一個錯誤

var array = [[12,46,["a","b","c"],"nil",true,7,true],[10,40,["c","d","e"],"nil",true,7,true],[0,1,["z","l","w"],"hey",false,7,true]]. 

,當我試圖通過這個代碼更改數組布爾的最後一個布爾值:

array[0][6] = false 

我得到這個錯誤「不能通過下標下標是隻能獲取數組」

回答

4

有趣。我認爲編譯器絆倒了某個地方。你只需要檢查陣列的類型來理解爲什麼:

var array = [ 
    [12,46,["a","b","c"],"nil",true,7,true], 
    [10,40,["c","d","e"],"nil",true,7,true], 
    [0,1,["z","l","w"],"hey",false,7,true] 
] 

print(array.dynamicType) // Array<NSArray> 
         // can't assign to the inner array since NSArray is immutable 

給斯威夫特內型的暗示和它的作品

var array: [[AnyObject]] = [ 
    [12,46,["a","b","c"],"nil",true,7,true], 
    [10,40,["c","d","e"],"nil",true,7,true], 
    [0,1,["z","l","w"],"hey",false,7,true] 
] 

array[0][6] = false  // works 
+0

謝謝你已經工作了! – Theilya

+0

我不知道爲什麼Swift編譯器默認爲非Swift本機類型'NSArray'? –

2

,您應該使用的元組數組來代替。使更好的代碼,執行更好,並且不依賴於Objective-C:

var array = [ 
    (12,46,["a","b","c"],"nil",true,7,true), 
    (10,40,["c","d","e"],"nil",true,7,true), 
    (0,1,["z","l","w"],"hey",false,7,true) 
] 

// Array has type [(Int, Int, [String], String, Bool, Int, Bool)] 

array[0].6 = false 
+0

這澄清程序員的目的,特別是因爲外陣列的所有條目具有相同的結構('Int','Int','[字符串]','String','Bool','Int','Bool') 。 –