应用程序在swift 3中的for循环中崩溃

时间:2017-10-25 06:55:58

标签: ios swift

这里我只是获取数组计数并使用for循环,但在完成我的数组计数后在rename -n -v 's/live.conf/dev.conf/' * 此行遭遇崩溃不知道为什么它会崩溃任何人都可以帮助我如何解决这个

let arr = arrayAdaptor[i]

5 个答案:

答案 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)
}

See this

答案 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)
     })