我非常喜欢迅速,请耐心等待我:)
如果,在以下代码中
for i in (1...(self.count - 1)) { //(self.count is number of elements in Array Extension)
print(i)
}
self.count变为1.
嗯..我可以像以下一样工作
if self.count > 1
{
for i in (1...(self.count - 1)) {
print(i)
}
}
else
{
for i in ((self.count - 1)...1) {
print(i)
}
}
但还有另一种(可能更好)的方式来解决这个问题吗?
其中我不必使用if-else控制语句
PS: - 正如评论中所建议的那样,我也使用了
for i in [(1...(self.count - 1))]
{
print(i)
}
但是当self.count = 1
时它仍会崩溃答案 0 :(得分:0)
处理范围异常的最佳方法是不引起它们 首先;)
为什么不使用基于零的索引,然后在需要时稍后在循环中调整它?
extension Array {
func oneBasedIndices() -> [Int] {
return (0..<count).map { return $0 + 1 }
}
}
Array
count
成员的最小数量可能是0
,而0..<0
永远不会失败,所以也许这样的扩展可以做到如果您想要的是基于1的索引。
答案 1 :(得分:0)
要迭代所有数组索引,请使用..<
范围运算符
省略上限:
for i in 0 ..< array.count { }
或更好:
for i in array.indices { }
后者的优势在于它也适用于收藏品
不是从零开始的索引(例如ArraySlice
)。
迭代所有索引,但第一个,
for i in array.indices.dropFirst() { }
适用于所有情况,即使数组为空。你也应该检查一下 如果你真的需要索引,或者你真的想要迭代 在数组元素上,例如
for elem in array.dropFirst() { }