有没有办法在Swift中使用反向范围?
例如:
for i in 5...1 {
// do something
}
Run Code Online (Sandbox Code Playgroud)
是一个无限循环.
我知道我可以使用1..5
,计算j = 6 - i
和使用j
我的索引.我只是想知道是否有更清晰的东西?
我有一个NSArray
并且必须在特殊情况下向后迭代它,所以我先看看最后一个元素.这是出于性能原因:如果最后一个没有意义,那么所有以前的都可以被忽略.所以我想打破循环.但是,如果我从0向前迭代,那将无效.我需要从n到0.也许有一个我不知道的方法或功能,所以我不必在这里重新发明轮子.
通过字符串中的字符向后迭代的最Swiftian方法是什么?即for ch in str
,只是反过来?
我想我必须遗漏一些明显的东西,因为我刚才能想到的最好的是:
for var index = str.endIndex;
index != str.startIndex;
index = index.predecessor() {
let ch = str[index.predecessor()]
...
}
Run Code Online (Sandbox Code Playgroud)
我意识到"什么是最好的..."可能被归类为主观的; 我想我真正想要的是一种简洁易读的方法.
编辑:虽然reverse()工作并且很简洁,但与上面相比,它看起来可能效率很低,即看起来它实际上并不是向后迭代,而是在字符串中创建字符的完整反向副本.如果你正在寻找一些10,000字符字符串末尾通常是几个字符的东西,那么这比我原来的要糟糕得多.因此,我暂时搁置这个问题以吸引其他方法.
是否可以创建倒置Range
?
我的意思是从99到1,而不是相反.我的目标是将值从99迭代到1.
这不会编译,但它应该让你知道我正在尝试做什么:
for i in 99...1{
print("\(i) bottles of beer on the wall, \(i) bottles of beer.")
print("Take one down and pass it around, \(i-1) bottles of beer on the wall.")
}
Run Code Online (Sandbox Code Playgroud)
什么是实现这一目标的最简单方法Swift
?
递减for()循环的语法是什么?
我想做以下类似的事情而不会出现编译错误:
for ndx in 5...4 {
print("do something")
}
Run Code Online (Sandbox Code Playgroud) 我有一个像这样定义的 Swift for 循环:
for i in 20...1 {
array.append(i)
}
Run Code Online (Sandbox Code Playgroud)
但我收到消息崩溃
Thread 1: Fatal error: Can't form Range with upperBound < lowerBound
Run Code Online (Sandbox Code Playgroud)
什么是修复?