2017-01-06 60 views
-1

我想創建一個由多個套裝組成的套牌。但是,可能只有一些西裝可用。
因此,我創建了一個函數validCards() -> [Card],它應該從卡組中挑選10張有效牌並將它們作爲一組牌返回。swift3參數outside repeat-while循環

func validCards() -> [Card] { 
    let availableSuits: [String] = ["Diamond"] 
    let deck: [Card] = Card.deck() 
    var validDeck: [Card] = [] 
    for i in 0...10 { 
     repeat { 
      let (card, index) = deck.randomElement() 
     } while !availableSuits.contains(card.suit) "|ERROR: Use of unresolved identifier card" 
     validDeck.append(card) "|ERROR: Use of unresolved identifier card" 
    } 
    return validDeck 
} 

唯一可能的原因是在8號線和9中的錯誤(據我所知)是變量是repeat {}內部本地: 它通過重複挑一張牌,直到它是有效的做到這一點循環。
然而,迅速不讓我簡單地寫public var,它拋出一個錯誤「屬性市民只能在非本地範圍應用。

有人能幫助我嗎? 非常感謝提前, Narusan

PS:我有一個結構,它定義Card,它工作完全正常,也是陣列擴展randomElement作品

+1

'讓(卡索引)'是'裏面塊repeat'所以它不是可用的外塊,你需要一個像'變種重複塊(卡索引)之前聲明元組:( Card,Int)' –

+1

另外它看起來像'suit'是String屬性,所以你需要使用包含'availableSuits'數組的。 –

+0

是的,我也注意到了。非常感謝 – Narusan

回答

1

你只需要預先聲明,這樣的card範圍並不僅僅侷限於repeat塊:

func validCards() -> [Card] { 
    let availableSuits = ["Diamond"] 
    let deck = Card.deck() 
    var validDeck = [Card]() 
    for i in 0...10 { 
     let card: Card 
     let index: Index 
     repeat { 
      (card, index) = deck.randomElement() 
     } while card.suit != availableSuits "|ERROR: Use of unresolved identifier card" 
     validDeck.append(card) "|ERROR: Use of unresolved identifier card" 
    } 
    return validDeck 
} 
+0

哈哈,我是多麼愚蠢的想法。當然必須這樣做。我會盡快接受你的回答(提問後10分鐘) – Narusan

+2

這是一個解決你確切問題的方法,但Nirav的建議更好 – Alexander

+0

感謝你的誠實。我自己最終以Nirav的方式來做,但你的答案更廣泛! – Narusan