LoginSignup
1
1

More than 3 years have passed since last update.

型のネスト とは

Swiftでは、型の中に型を定義することができ、それを型のネストと言います。

ネストされた型はネストする型の名前を引き継ぐことになるため、
型名をより明確かつ簡潔にできるというメリットがあります。

定義方法

型のネストをするには、型の定義の中に型を定義します。

例として以下のようなコードがあったとします。

スポーツをやっていた人のステータスを表すSports型と、
そのスポーツの種類を表すSportsKind型が存在したとします。


enum SportsKind {
    case tennis
    case soccer
    case baseball
}

struct Sports {
    var name: String
    var history: Int
    let kind: SportsKind
}

この場合、SportsKind型は、Sports型の種類を表していることは推測できますが、
命名で縛っているにすぎません。

次のサンプルコードのように
Sports型の中にSportsKind型をネストしKindにリネームすると、
Sports.Kind型となります。

Sports.Kintd型は、SportsKind型と比べると、
Sports型との関連性が取り明確になっています。

また、let kind: Kindを見てわかるように、
Sports.Kind型はSports型の内部ではKind型として参照できるため
型名もより簡潔に記述できるようになりました。


struct Sports {
    enum Kind {
        case tennis
        case soccer
        case baseball
    }

    var name: String
    var history: Int
    let kind: Kind   

    init(name: String, kind: Kind, history: Int) {
        self.name = name
        self.kind = kind
        self.history = history
    }

    func status() {
        // "\n" は改行を表しています。
        print("名前:\(name)\nスポーツ:\(kind)\n経験歴:\(history)年")
    }
}

let humanAKind = Sports.Kind.baseball
let humanBKind = Sports.Kind.soccer
let humanA = Sports(name: "坂本", kind: humanAKind, history: 30)
let humanB = Sports(name: "本田", kind: humanBKind, history: 25)

humanA.status()
print("---")
humanB.status()

実行結果
名前坂本
スポーツbaseball
経験歴30
---
名前本田
スポーツsoccer
経験歴25

以上で型のネストについての説明を終了します!

型の中に型を入れるだけなの記事のボリュームは小さいですが、
型のネストは結構重要な内容です。

余談ですがString型やInt型も型の中にさらに型が存在します。

そのくらい色々なところで当たり前に使われている機能なので、
ぜひ使えるようになってください!

他の記事でも型の構成要素について記載しているものがあるので、ぜひそちらもご覧ください。

【Swift】型の構成要素〜型の基本〜
【Swift】型の構成要素〜プロパティ前編〜
【Swift】型の構成要素〜イニシャライザ〜
【Swift】型の構成要素〜メソッド〜
【Swift】型の構成要素〜サブスクリプト〜
【Swift】型の構成要素〜エクステンション〜

最後までご覧いただきありがとうございました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1