我想从一套有多套西装的套装中创建一副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
也可以工作。
答案 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
}