我更新了
Xcode(7.3)并且有很多变化;表达式的C-like将被弃用.举个简单的例子,
for var i = 0; i <= array.count - 1; i++ { //something with array[i] }
如何编写这个清晰简单的C-like for-loop以符合新的变化?
for var i = 0,j = 1; i <= array.count - 2 && j <= array.count - 1; i++,j++ { //something with array[i] and array[j] }
更新.
还有一个变种
for var i = 0; i <= <array.count - 1; i++ { for var j = i + 1; j <= array.count - 1; j++ { //something with array[i] and array[j] } }
和更多 …
for var i = 0,j = 1,g = 2; i <= array.count - 3 && j <= array.count - 2 && g <= array.count - 1; i++,j++,g++ { //something with array[i] and array[j] and array[g] }
Update2经过几次建议,while循环是优选的,所有情况的通用替换比C-like for-loop的简单示例更复杂(适用于in表达式).不需要每次都寻找新的方法.
例如:而不是
for var i = 0; i <= <array.count - 1; i++ { for var j = i + 1; j <= array.count - 1; j++ { //something with array[i] and array[j] } }
我可以用
var i = 0 while i < array.count { var j = i + 1 while j < array.count { //something with array[i] and array[j] j += 1 } i += 1 }
最坏的情况是,您可以将其转换为while循环.
var i = 0 var j = 1 while i <= array.count -2 && j <= array.count - 1 { // something i += 1 j += 1 }
– 编辑 –
因为你说过,“while循环是所有情况的优选通用替换比C-like for-loop的简单例子更复杂”……我觉得有必要扩展我的答案.我不想对一堆坏代码负责……
在大多数情况下,有一个简单的for-in循环可以处理这种情况:
for item in array { // do something with item } for (item1,item2) in zip(array,array[1 ..< array.count]) { // do something with item1 and item2 } for (index,item1) in array.enumerate() { for item2 in array[index + 1 ..< array.count] { // do soemthing with item1 and item2 } }
对于你的最后一种情况,你可能有理由使用for look,但这是一个非常罕见的边缘情况.
不要使用for循环丢弃代码.