字符串

时间:2015-05-28 15:32:07

标签: arrays swift

我想创建一个数组,为拾取器保存两个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]

获得了“数组索引超出界限”

我做错了什么? (可能非常明显)

1 个答案:

答案 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)