我阅读了swift手册,并试图做一些练习。但我遇到了一个问题,我不知道我是否做错了,或者xCode 6 beta是否只是错误。
// Playground - noun: a place where people can play
import Cocoa
let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25],
]
var largest = 0
var lastLargest = Integer[]()
var index = 0
for (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
//lastLargest[index] = number
index++
largest = number
}
}
}
index
lastLargest
largest
一旦我取消注释lastLargest[index] = number
我在操场上的右侧没有任何结果。我也没有关于index
,lastLargest
或largest
的任何信息。
以下示例也不起作用:
var index2 = 0
var lastLargest2 = Integer[]()
lastLargest2[index2] = 1
index2++
lastLargest2[index2] = 2
答案 0 :(得分:2)
您正在使用out of bound array-index追加。不要这样做。相反,请使用追加:
lastLargest.append(number)
来自Apple的documentation:
您不能使用下标语法将新项目附加到数组的末尾。如果您尝试使用下标语法来检索或设置超出数组现有边界的索引的值,则会触发运行时错误。
答案 1 :(得分:1)
当您使用显式索引(下标符号)在可变数组中设置值时,该索引中该数组中必须已存在某些值。当你使用下标符号时,你实际上是使用'set',而不是'set并在必要时添加'。
因此,您应该使用:
lastLargest.insert(number, atIndex: index)
如果要插入新项目。这将允许您在指定的索引处插入一个项目,假设您的集合的大小已经大于或等于您要替换的索引。