環境:Xcode6 beta 4
(a...b)
や (a..<b)
などのRange Operatorで、 startIndex
が endIndex
より大きい場合、forループで使うと無限ループになります
// 無限ループ
for i in 10..<9 {
println(i)
}
直接リテラルでこのように書く人はいないでしょうが、こんなケースでは注意が必要です。
func copyArray<T>(source: [T], padding: T, length: Int) -> [T] {
let sourceCount = source.count
var result = [T]()
for element in source {
result.append(element)
}
// souceCount > lengthの時に無限ループ
for _ in sourceCount..<length {
result.append(padding)
}
return result
}
let threeWords = ["one", "two", "three"]
let fiveWords = copyArray(threeWords, "zero", 5) // ["one", "two", "three", "zero", "zero"]
let twoWords = copyArray(fiveWords, "zero", 2) // 無限ループ
こういう挙動って期待してないんですが、バグではなくて仕様なんでしょうか?