Swift3参数在repeat-while循环之外

时间:2017-01-06 17:37:25

标签: function scope swift3

我想从一套有多套西装的套装中创建一副10张牌。但是,可能只有一些套装可用 因此,我创建了一个函数validCards() -> [Card],它应该从牌组中挑选10张有效牌并将其作为一系列牌返回。 它通过重复选择卡片直到它有效来实现这一点:

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 {}循环内是局部的。
但是,swift不允许我简单地编写public var,它会抛出错误"属性public只能应用于非本地范围。

有人能帮助我吗? 非常感谢提前, Narusan

PS:我有一个定义Card的结构,它工作得很好,并且数组扩展randomElement也可以工作。

1 个答案:

答案 0 :(得分: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
}