#型のネスト とは
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】型の構成要素〜エクステンション〜
最後までご覧いただきありがとうございました。