我是用于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...
}
那么最好的方法是什么,你们有什么想法吗?
答案 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
}
}