2017-03-08 59 views
0

我有這樣的代碼這是不符合swift3斯威夫特3和代碼轉換器反向

for var i = FCatalogIdx-1; i > -1; i -=1 { 
    // access items in array FCaalogArr 
} 

碼轉換器兼容的建議轉化爲

​​

這似乎是一樣的:

for i in (0...FCatalogIdx-1).reversed() { 

這是最接近我可以得到我的舊代碼?如果是這樣,是否建議使用代碼轉換器的建議 - (-1 + 1)看起來很醜,但我懷疑它是提供一個原始的c樣式循環邏輯的提示?

+0

如果你的目標只是迭代FCatalogArr,只是在FCatalogArr.reversed使用'的元素( ){...' – Alexander

+0

我需要從FCatalogIdx開始迭代開始 – Tom

+0

您是否真的需要使用索引,還是隻關心arrray的元素? – Alexander

回答

2

您不應該使用(-1+1),因爲這只是不必要的混淆。此外,使用半開區間操作..<創建範圍不包括最終指數:

for i in (0 ..< FCatalogIdx).reversed() { 
} 

半開區間操作的優點..<封閉範圍運算符...是可以創建一個空的範圍。

考慮這個例子:

let n = 0 

for i in 0 ..< n { 
    print("hello") // range is empty, so this is never printed 
} 

for i in 0 ... n-1 { // fatal error: Can't form Range with upperBound < lowerBound 
    print("hello") 
} 
+0

我相信這看起來是最乾淨的解決方案 - 謝謝! – Tom

+0

@Tom,我添加了關於*半開範圍運算符*'.. <'的更多信息。 – vacawama

0

for i in FCaalogArr.indicies.reversed()會更好,假設FCaalogIdx是數組的最後一個索引