是否有可能在Swift中遍歷枚舉值?或者有什麼選擇?循環遍歷Swift中的枚舉值
我正在通過蘋果的Swift語言指南,我遇到了關於枚舉的這個例子。
// EXPERIMENT
//
// Add a method to Card that creates a full deck of cards,
// with one card of each combination of rank and suit.
struct Card {
var rank: Rank
var suit: Suit
func simpleDescription() -> String {
return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"
}
}
let threeOfSpades = Card(rank: .Three, suit: .Spades)
let threeOfSpadesDescription = threeOfSpades.simpleDescription()
enum Suit {
case Spades, Hearts, Diamonds, Clubs
func simpleDescription() -> String {
switch self {
case .Spades:
return "spades"
case .Hearts:
return "hearts"
case .Diamonds:
return "diamonds"
case .Clubs:
return "clubs"
}
}
}
enum Rank: Int {
case Ace = 1
case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
case Jack, Queen, King
func simpleDescription() -> String {
switch self {
case .Ace:
return "ace"
case .Jack:
return "jack"
case .Queen:
return "queen"
case .King:
return "king"
default:
return String(self.toRaw())
}
}
}
摘錄自:蘋果公司「The Swift Programming Language。」iBooks。 https://itun.es/us/jEUH0.l
我試過以下,但文檔中說,在Swift中的枚舉不會像C中那樣分配底層整數值,所以我可能會吠叫錯誤的樹。
有沒有更好的方法來解決這個問題?
func deck() -> Card[]{
var deck: Card[]
for s in Suit {
for r in Rank {
deck += Card(rank: r, suit: s)
}
}
return deck
}
func deck2() -> Card[]{
var deck: Card[]
for var s: Suit = .Spades; s <= .Clubs; s++ {
for var r: Rank = .Ace; r <= .King; r++ {
deck += Card(rank: r, suit: s)
}
}
return deck
}
@MartinR謝謝,我沒有在我最初的搜索中找到一些原因。 雖然略有差異,但我也在尋找方法來實現構建一副沒有循環卡片的目標,如果可能的話。大概應該讓這個職位更清楚。 – glaslong
好吧,看來Swift沒有一個特別簡單的方法來迭代枚舉成員,而沒有將它們定義爲整數。有點令人失望,但我想我不應該像這樣使用枚舉。 仍然好奇爲什麼他們在書中以這種方式使用它,當字典似乎是這種情況下更好的選擇。 – glaslong