Swift

swift: associated valueを持つenumのswitchについて


どうもささおです。

associated valueを持つenumとswitchを組み合わせて使うことってよくありますよね!

 

ふいに書き方を忘れてしまうことがあるのでメモしていきます。

 

〜〜〜associated valueとパターンマッチング〜〜〜

enum ColorType {
    case red(code: String)
}

let red = ColorType.red(code: "#FF0000")
switch red {
case .red("#EE0000"):
    print("一緒")
default:
    print("違う")
}

// "違う"

注目していただきたいのはここです。
case .red("#EE0000"):

.red()の引数(引数と言っていいのか??)に”#EE0000″を入れて定数redの”#FF0000″と比較しています。

 

ここでん??と思うことがあります。

引数名書いてないけどいいの??というところです。

case .red(code: "#EE0000"):

このように書く必要があるのではないか??ということです。

ちなみにどっちでも動きます。

 

〜〜〜associated valueと定数〜〜〜

enum ColorType {
    case red(code: String)
}

let red = ColorType.red(code: "#FF0000")

switch red {
case .red(let code):
    print(code)
}

注目していただきたいのはこちらです。
case .red(let code):

ここでは.red()の引数でlet codeで定数を定義している。

定数codeには

let red = ColorType.red(code: "#FF0000")

での”#FF0000″が入っています。

これをcase{ }内で定数codeを使用することができます、

 

 

まとめ

associated valueを「パターンマッチング」に使ったときも

「引数で定数を定義」するときも

引数内に書きますが、

何を書くかで全く違うものになるので注意が必要です。

 


ABOUT ME
ささお
3年目iOSエンジニア。 スタートアップで働いておりやす。 プログラミングスクールとエンジニアのキャリアを考えたい。 作ったアプリ - https://apps.apple.com/us/app/loverprofile/id1463563845?l=ja&ls=1