構造体

構造体の宣言
列挙型(なまの値)と構造体
列挙型(共用体)と構造体

構造体の宣言

別にどうってわけでもない。

struct SomeStructure {
	//いろいろ
}

クラスにも言えることだが、構造体の名前はアッパーキャメルケースとかいうので単語の頭文字がぴょんぴょんしてるような奴にしなければならない。中に入れるプロパティもろうわーキャメルケースとかいうのにする。

ちなみに構造体はインスタンスを作るついでに値を設定できる。

struct Resolution {
	var width = 0
	var height = 0
}
let vga = Resolution(width: 640, height: 480)

列挙型(なまの値)と構造体

次のようなトランプ用の列挙型を用意してみた。
まずは数字のほう。

enum Rank: Int {
	case Ace = 1
	case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
	case Jack, Queen, King
	
	//enumの中に関数を作れる
	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()
//Rankに3番目の要素が存在していれば、それを得てsimpleDescriptionを実行
if let convertedRank = Rank.fromRaw(3) {
	let threeDescription = convertedRank.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"
		}
	}
}

こちらも使ってみるとこんな感じ。

//Heartに対してsimpleDescriptionをやる
let hearts = Suit.Hearts
let heartsDescription = hearts.simpleDescription()

さて、
さて、
さて。
こいつらをまとめ上げる構造体を作ってみる。

struct Card {
	var rank: Rank
	var suit: Suit

	func simpleDescription() -> String {
		return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"
	}
}

//rankとsuitを初期化(スペードの3)
let threeOfSpades = Card(rank: .Three, suit: .Spades)
let threeOfSpadesDescription = threeOfSpades.simpleDescription()

トランプの数字や種類の情報を持つ構造体ができあがった。

列挙型(共用体)と構造体

次は共用体を持つ列挙型とのコラボ。

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)"
}

↑ PAGE TOP