我想创建一个数组,为拾取器保存两个String数组。每个数组需要1 - 30(字符串,而不是Ints)
我认为我做得对,但Xcode不同意:
var scorePickerArray: [[String]] = []
for var i: Int = 0; i < 2; i++
{
for var j: Int = 0; j < 30; j++
{
scorePickerArray[i][j] = String(j + 1)
}
}
我为scorePickerArray [0] [0]
获得了“数组索引超出界限”我做错了什么? (可能非常明显)
答案 0 :(得分:3)
你的版本没有用,因为当你要求scorePickerArray[0][0]
时,第二个维度尚未创建,所以它超出范围&#34;,即说scorePickerArray[0]
还没有成员,您无法使用下标([0][0]
)访问它们。
解决方案:
var scorePickerArray = [[String]]()
var temp = [String]()
for i in 1...30 {
temp.append("\(i)")
}
for i in 0...1 {
scorePickerArray.append(temp)
}
结果:
[[&#34; 1&#34;,&#34; 2&#34;,&#34; 3&#34;,&#34; 4&#34;,&#34; 5&#34;, &#34; 6&#34;,&#34; 7&#34;,&#34; 8&#34;,&#34; 9&#34;,&#34; 10&#34;,&#34; 11& #34;,&#34; 12&#34;,&#34; 13&#34;,&#34; 14&#34;,&#34; 15&#34;,&#34; 16&#34;,& #34; 17&#34;,&#34; 18&#34;,&#34; 19&#34;,&#34; 20&#34;,&#34; 21&#34;,&#34; 22&# 34;,&#34; 23&#34;,&#34; 24&#34;,&#34; 25&#34;,&#34; 26&#34;,&#34; 27&#34;,&# 34; 28&#34;,&#34; 29&#34;,&#34; 30&#34;],[&#34; 1&#34;,&#34; 2&#34;,&#34; 3& #34;,&#34; 4&#34;,&#34; 5&#34;,&#34; 6&#34;,&#34; 7&#34;,&#34; 8&#34;,& #34; 9&#34;,&#34; 10&#34;,&#34; 11&#34;,&#34; 12&#34;,&#34; 13&#34;,&#34; 14&# 34;,&#34; 15&#34;,&#34; 16&#34;,&#34; 17&#34;,&#34; 18&#34;,&#34; 19&#34;,&# 34; 20&#34;,&#34; 21&#34;,&#34; 22&#34;,&#34; 23&#34;,&#34; 24&#34;,&#34; 25&#34 ;,&#34; 26&#34;,&#34; 27&#34;,&#34; 28&#34;,&#34; 29&#34;,&#34; 30&#34;]]
更新Swift 2
Swift 2的一个更好的解决方案是使用从一个范围生成的Ints数组(每个Int映射到String)而不是循环:
let innerArray = Array(1...30).map { String($0) }
然后像这样重复:
let scorePickerArray = Array(count:2, repeatedValue: innerArray)