为什么这个简单的数组访问在Swift中不起作用?

时间:2018-01-01 23:49:30

标签: arrays swift

var word = "morning"
var arr = Array(word)
for s in 0...word.count {
        print(arr[s])
}

这不会打印。当然,如果我用数字替换s,代码工作正常。 为什么它不接受数组访问大括号中的变量?这是Swift特有的吗?

我花了很长时间试图解决这个问题,这与s是可选的无关。

任何人都明白这一点?

4 个答案:

答案 0 :(得分:1)

您使用的是包含范围...而不是..<,因此s从0到7,而不是0到6.

但是,在arr中,索引从0到6,因为有7个字符。

因此,当程序试图访问arr[7]时,它会抛出索引超出范围错误。

如果您使用Xcode进行编码,调试器会告诉您没有arr[7]

至于代码,这是打印arr中每个项目比使用索引计数器更好的方法:

var word = "morning"
var arr = Array(word)

for s in arr {
    print(s)
}

这称为&#34; foreach循环&#34;,对于arr中的每个项目,它将其分配给s,在循环中执行代码,然后转到下一个项目,将其分配给s,以及等等。

当你必须访问数组或集合中的每个元素时,foreach循环通常被认为是一种更优雅的方式,除非你需要在循环期间存储某个项的索引,在这种情况下唯一的选择是基于范围的for循环(您正在使用)。

快乐的编码!

答案 1 :(得分:1)

试试这个 当你用一个词来识别 您的Array索引的数组大小为0,因此数组最后一个索引必须与您的(word.count - 1)

相等
var word = "morning"
    var arr = Array(word)
    for s in 0...(word.count-1) {
        print(arr[s])
    }

答案 2 :(得分:0)

当我运行它时,它打印数组然后抛出错误Fatal error: Index out of range。要解决此问题,请将for循环更改为:

for s in 0..<word.count {
    print(arr[s])
}

答案 3 :(得分:0)

基本上尽可能避免基于索引的for循环。

要打印字符串的每个字符,只需使用

var word = "morning"
for s in word { // in Swift 3 word.characters
    print(s)
}

要解决索引问题,您必须使用半开放范围运算符..<,因为索引从零开始。