这里我只是获取数组计数并使用for循环,但在完成我的数组计数后在rename -n -v 's/live.conf/dev.conf/' *
此行遭遇崩溃不知道为什么它会崩溃任何人都可以帮助我如何解决这个
let arr = arrayAdaptor[i]
答案 0 :(得分:8)
运算符...
超出了数组的范围。你必须写
for i in 0..<arrayAdaptor.count
或
for i in 0...arrayAdaptor.count - 1
基本上根本不在Swift中使用这些基于索引的for
循环。
使用Fast Enumeration
:
for arr in arrayAdaptor {
如果你真的需要索引
for (index, arr) in arrayAdaptor.enumerated() {
答案 1 :(得分:6)
为什么您使用0...arrayAdaptor.count
范围样式来避免它并且简单地使用数组的enumerated():
for (_,value) in arrayAdaptor.enumerated() {
let number = value.row
let row = number + 1
dict.updateValue("\(arr.rating)", forKey: "\(row)")
print(dict)
}
如果您不希望任何索引尝试使用此功能:
for value in arrayAdaptor {
let number = value.row
let row = number + 1
dict.updateValue("\(arr.rating)", forKey: "\(row)")
print(dict)
}
答案 2 :(得分:1)
答案中未提及的选项之一是forEach
方法。
arrayAdaptor.forEach { item in
print(item)
}
或
arrayAdaptor.forEach {
print($0) // without named parameter
}
//你的案子:
arrayAdaptor.forEach { item in
let arr = item
let number = item.row
let row = number + 1
dict.updateValue("\(arr.rating)", forKey: "\(row)")
print(dict)
}
这与 vadian 的答案中提到的方便for..in
几乎相同:
for arr in arrayAdaptor { ... }
答案 3 :(得分:1)
从 Swift 4 ,您可以使用One sided ranges。
i...
比i..<
更受青睐,因为后者很难看。我们必须选择一个,两个是多余的,并且可能引起混淆,因为&#34;对&#34;一。在迂腐正确的基础上要么合理 - (i as Int)...
包括与...,
一致的Int.max,而a[i...]
被解释为a[i..<a.endIndex]
与i..<.
示例:强>
var names = ["Jack", "New", "peter"]
let first = names[0...]
let second = names[..<names.count]
print(first)//prints ["Jack", "New", "peter"]
print(second)//prints ["Jack", "New", "peter"]
答案 4 :(得分:0)
您还可以通过“地图”功能迭代循环:
let _ = arrayAdaptor.map({ adaptor in
let number = adaptor.row
let row = number + 1
dict.updateValue("\(adaptor.rating)", forKey: "\(row)")
print(dict)
})