2016-05-29 26 views
0

我正在遍歷var cards : [Card]並在每個條目上運行函數。其中一些條目在它之前修改了卡。陣列中「我」之前的對象

1)有沒有簡單的方法來說「前一個對象」?

2)有沒有簡單的方法來說「我的索引內的集合」?然後,我可以使用該索引-1獲取上一張卡片。

現在我正在循環,但斯威夫特使我感到驚訝與我不知道更容易的解決方案,所以我希望這是這種情況。

更新: 下面是基本代碼。 DeckCard組成,每個描述一點3D幾何。所以我有一個名爲Draw方法,是以Deck作爲參數d然後做到這一點:

for g in d.cards { 
    switch g.info["type"] ?? "" { 
     case "GA" : arc(g) 
     case "GE" : ground(g) 
     case "GH" : helix(g) 
     case "GW" : wire(g) 
     case "SP" : patch(g) 
     case "SM" : multi(g) 
     case "GM" : duplicate(g, deck:d) 
     case "GR" : cylinder(g, deck:d) 
     default : continue 
    } 
} 

現在一些這些卡,通用汽車一樣,例如,重複以前Card。所以我以前打遍整個Deck再次尋找g,然後採取前一個。這是次優! @ vadian下面的解決方案整齊地解決了這個問題。

+2

你能描述您更多的算法?如果您沒有具體說明哪種解決方案最好,這有點難。 – Sulthan

+0

是蘇丹,我應該在這方面進行很多擴展。我正在更新原始問題。 –

回答

3

enumerate功能同時提供項目和指標

let array = ["a", "b", "c", "d", "e"] 

for (index, item) in array.enumerate() { // Swift 3: enumerated() 
    print(item) 
    if index != 0 { print(array[index - 1]) } 
    // or – more sophisticated – array[index.predecessor()] 
} 
+0

我以前沒有遇到過這種情況,但它似乎是很多小問題的解決方案。謝謝! –