是否有一个更整洁或更好的方法来编写以下嵌套在Swift中的... in循环?或者正在使用...甚至以正确的方式填充我的卡片?
for cardNumber in 1...3 {
for cardSymbolIdentifier in 1...3 {
for cardColorIdentifier in 1...3 {
for cardShadingIdentifier in 1...3 {
let card = Card(cardNumber: cardNumber, cardSymbolIdentifier: cardSymbolIdentifier, cardColorIdentifier: cardColorIdentifier, cardShadingIdentifier: cardShadingIdentifier)
deckOfCards.append(card)
}
}
}
}
它确实完成了这项工作,但我在文档中找不到有关编写多个嵌套循环的内容。
非常感谢Andy
你的for循环绝对没有问题。他们是优秀的,写得很好的斯威夫特。您的代码唯一的问题是它强制deckOfCards
是可变的(var),这可能是不可取的。如果是,你可以使用map
,但我不认为这特别好的Swift,只是略有不同。
let d = (1...3).flatMap { number in
(1...3).flatMap { symbol in
(1...3).flatMap { color in
(1...3).map { shading in
Card.init(cardNumber: number,
cardSymbolIdentifier: symbol,
cardColorIdentifier: color,
cardShadingIdentifier: shading
)}}}}
我可能会以第二种方式编写它,但仅出于文体原因。你的for循环绝对没问题。
注意@ user28434的评论如下。我的original version有一个主要的错误(它返回错误的类型)。从发布之日起我就一直在编写Swift。我教斯威夫特。我在Swift中教授函数式编程。我在飞行中写它时搞砸了。我永远不会用一个简单的for循环来犯这个错误。那里有一个重要的教训。
根据需要,您的代码根本没有优化问题,但您可以使它更优雅或更优雅(:p)
let values = [1,2,3]
values.forEach { (cardNumber) in
values.forEach { (cardSymbolIdentifier) in
values.forEach { (cardColorIdentifier) in
values.forEach { (cardShadingIdentifier) in
let card = Card(cardNumber: cardNumber, cardSymbolIdentifier: cardSymbolIdentifier, cardColorIdentifier: cardColorIdentifier, cardShadingIdentifier: cardShadingIdentifier)
deckOfCards.append(card)
}
}
}
}