[Swift] Enumerations and Structures

Enumerationは数値だけでなく、FloatもOKのようです。
値を保持するEnumerationも定義する事が可能です。
値を保持するEnumはサーバーの戻り値を定義したりする際に使えるかもしれません。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Enumeration
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 "A"
        case .jack:
            return "J"
        case .queen:
            return "Q"
        case .king:
            return "K"
        default:
            return String(self.rawValue)
        }
    }
}
 
enum Suit: Int {
    case club, dia, heart, spade
 
    func simpleDescription() -> String {
        switch self {
        case .club:
            return "Club"
        case .dia:
            return "Dia"
        case .heart:
            return "Heart"
        case .spade:
            return "Spade"
        }
    }
}
 
let ace = Rank.ace
print(ace.simpleDescription())
print(ace.rawValue)

Enumには関数を定義する事もできるので、Enumで振る舞いを定義する事もできそうです。

値をストアするEnum

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 値をストアするEnumも作成可能
enum ServerResponse {
    case result(String, String)
    case failure(String)
}
 
let success = ServerResponse.result("6:00 am", "8:09 pm")
let failure = ServerResponse.failure("out of cheese.")
 
switch success {
case let .result(sunrise, sunset):
    print("Sunset is at \(sunrise) and sunset is at \(sunset)")
case let .failure(message):
    print("Failure... \(message)")
}

同じ状態でも、保持する値が違うような場面で使用するとコードがスッキリしそうです。

構造体 (Structure)

構造体はstructキーワードから始まります。
データの保持に特化する場合は、構造体を使うのが良さそうです。

1
2
3
4
5
6
7
8
9
10
11
// 構造体はstructキーワードから始まる
struct Card {
    var rank: Rank
    var suit: Suit
    func simpleDescription() -> String {
        return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"
    }
}
 
let threeOfSpades = Card(rank: .three, suit: .spade)
print(threeOfSpades.simpleDescription())

参考URL

0 件のコメント :

コメントを投稿