Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
/*
列挙型と構造体
*/
// enumを使えば、列挙型を生成できます。クラスや独自型のように、列挙型もメソッドを持つことができます。
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.rawValue)
}
}
}
let ace = Rank.Ace
let aceRawValue = ace.rawValue
print(aceRawValue) // 1
// ex: 2つのRankの値を比較する関数を作成する。
func compareRanks(rank1 :Rank, rank2 :Rank) -> String {
if(rank1.rawValue > rank2.rawValue) {
return "rank1 is bigger!"
} else if(rank1.rawValue < rank2.rawValue) {
return "rank2 is bigger!"
} else {
return "both are same!"
}
}
let rankTwo = Rank.Two
let rankFour = Rank.Four
print(compareRanks(rankTwo, rank2: rankFour)) // rank2 is bigger!
// Switfでは、ゼロから始まる値がEnumのそれぞれの要素に割り当てられる。ただし、値を明示することもできる。
// 上記の例では、Aceに1が割り当てられている。StringやFloat値を指定することも可能。
// Enumの割り当てられた値にアクセスするには、rawValueプロパティを使う。
//
if let convertedRank = Rank(rawValue: 3) {
let threeDescription = convertedRank.simpleDescription()
print(threeDescription) // 3
}
// Enumの要素の名称と同じような値を設定することはあまり意味が無い。(ここ、きちんと英語を理解できてないかも)
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"
}
}
}
let hearts = Suit.Hearts
let heartsDescription = hearts.simpleDescription()
print(heartsDescription)
// ex: 色を返すcolorメソッドを追加する。
enum SuitWithColor {
case Spades, Hearts, Diamonds, Clubs
func color() -> String {
switch self {
case .Spades, .Clubs:
return "black"
case .Hearts, .Diamonds:
return "red"
}
}
}
let suitRed = SuitWithColor.Hearts
print(suitRed.color()) // red
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment