如何使用Swift以优雅的方式从第二个元素循环遍历数组

时间:2016-08-22 03:18:46

标签: swift

我是用于iOS开发的Swift的初学者,并希望找到一种优雅的方法来从第二个元素循环遍历数组。

如果是在Objective-C中,我想我可以编写如下代码。

if(int i = 1; i < array.count; i++){
    array[i].blablabla....
}

我已尝试过几种方法在swift

中执行此操作
for i in  1..<array.count {
    array[i].blablabla....
}

但是通过这种方式,如果数组的计数为零,则应用程序将崩溃,因为它无法从1到0创建数组。

我也尝试过像这样的代码,但它似乎无法从第二个元素枚举。

for (index, object) in array.enumerate() {
    object.blablabla...
}

那么最好的方法是什么,你们有什么想法吗?

4 个答案:

答案 0 :(得分:12)

您可以将数组索引与dropfirst结合使用:

let array = [1,2,3,4,5]

for index in array.indices.dropFirst() {
    print(array[index])
}

或简单地说:

for element in array.dropFirst() {
    print(element)
}

答案 1 :(得分:1)

您也可以使用自定义下标来确保避免崩溃

extension Array {
    subscript (gurd index: Index) -> Array.Element? {
        return (index < self.count && index >= 0) ? self[index] : nil
    }
}

使用示例:

let myarray = ["a","b","c","d","e","f","g","h"]

 for i in -15...myarray.count+20{
            print(myarray[gurd: i])
        }

答案 2 :(得分:0)

通常,有一个很好的模式来获取这样的子数组:

let array = [1, 2, 3, 4, 5]
array[2..<array.count].forEach {
    print($0)     // Prints 3, 4, 5 (array from index 2 to index count-1)
}

Leo的答案更简洁,更适合您所询问的案例(从第二个元素开始)。这个例子从第三个元素开始,只显示了一个更通用的模式,用于从数组中获取任意元素范围并对它们执行操作。

但是,您仍然需要明确检查以确保使用有效范围以避免崩溃,例如:

if array.count > 1 {
    array[2..<array.count].forEach {
        print($0)
    }
}

答案 3 :(得分:0)

  if array.count>=2 {
     for n in 1...array.count-1{
         print(array[n])   //will print from second element forward 
      }
 }