var word = "morning"
var arr = Array(word)
for s in 0...word.count {
print(arr[s])
}
这不会打印。当然,如果我用数字替换s,代码工作正常。 为什么它不接受数组访问大括号中的变量?这是Swift特有的吗?
我花了很长时间试图解决这个问题,这与s是可选的无关。
任何人都明白这一点?
答案 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)
}
要解决索引问题,您必须使用半开放范围运算符..<
,因为索引从零开始。