2016-06-29 29 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') 。 –