列挙型(enum)と構造体(struct)

トップページ » 列挙型(enum)と構造体(struct)

11 Jun 2014 09:11公開

Swiftは列挙型と構造体をサポートしています。

列挙型Enumerations

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())
  }
 }
}
let ace = Rank.Ace
let aceRawValue = ace.toRaw()

列挙型の実際の値(raw)は文字列、数字を利用することができます。raw値と列挙値の間、toRaw、fromRawで変換します。

if let convertedRank = Rank.fromRaw(3) {
 let threeDescription = convertedRank.simpleDescription()
}

raw値がほとんどの場合、特に定義する必要がありません。

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()

構造体 Structures

構造体はメソッド、コンストラクターも持っています。クラスとよく似ています。違うのは構造体は常にコピーされます。クラスは引用で引き渡されます。

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()

列挙インスタンスに値を持たせる

列挙インスタンスに値を持たせることができます。
列挙型全体共通のraw値と違って、この持たせる値はそれぞれのインスタンスレベルで変えられます。
この例はサーバに、日の出のと日の入りの時刻を返す機能を実装します。

enum ServerResponse {
 case Result(String, String)
 case Error(String)
}
let success = ServerResponse.Result("6:00 am", "8:09 pm")
let failure = ServerResponse.Error("Out of cheese.")
switch success {
 case let .Result(sunrise, sunset):
  let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."
 case let .Error(error):
  let serverResponse = "Failure... \(error)"
}
[[code type="CPP"]]
[[code type="CPP"]]
[[code type="CPP"]]
[[code type="CPP"]]
[[code type="CPP"]]
[[code type="CPP"]]

シリーズ

記事のリスト

  • 列挙型(enum)と構造体(struct)

レーティング

rating: 0+x

コメント

Add a New Comment
当サイトコンテンツライセンスについて個別な指定がなければCreative Commons Attribution-ShareAlike 3.0 Licenseをベースします。転載や引用は大歓迎です。但し、転載・引用・二次利用の場合は当サイト記事へのURLをリンクし出典を明記してください。各作品を大切にして下さい。 また、記事及びコメントを投稿する皆さまも上記のライセンスを理解した上投稿して下さい。 当サイトのコンテンツは皆さまの投稿で作成されますから、当サイトの意思を反映しておりませんが、第三者の知的財産権などの侵害がある場合、当サイトの運営担当にご連絡ください。