17.構造体4(スタティックプロパティ)

構造体のプロパティには2種類ある
スタティックプロパティ

構造体で扱ったプロパティはインスタンスに紐づくインスタンスプロパティでした。

スタティックプロパティは型に紐づくプロパティのことでタイププロパティとも呼ばれます。

スタティックプロパティ

static let プロパティ名 = 値
static var プロパティ名 = 値

アクセス方法

型名.プロパティ名

型名は構造体名です。

型名(構造体名)でアクセスとは?

構造体の利用方法のひとつとして「構造体名を型名にできる」というものがあります。

struct Human{
    var name:String
    var age:Int
}
var h = Human(name:"Tom",age:23)
print(type(of:h))
構造体名はひとつの型

Humanという構造体を定義しました。

print(type(of:h))でh(構造体Human)の型名を調べた場合、コンソールには「Human」と表示されます。

これは構造体HumanがHuman型である(ひとつの型として機能している)ということを指しています。

今まで(type(of:))関数で確認できる型には次のものがありました。

Int型Float型Double型String型Bool型配列型です。

今までこれらを「データ型」として取り扱ってきましたが、これらの正体は実はこの「構造体」になります。

構造体名で型名を指定することもできる

var a:Int
var a:Human

今まではvar a:Intという形でデータ型名で型名を指定していましたが、

var a:Humanというように構造体名で型名を指定できるようになります。

注目

ここではスタティックプロパティにアクセスするには型名.プロパティ名になり、型名とは構造体名のこと!

ということだけ抑えておきます。

スタティックプロパティとインスタンスプロパティを両方使った例

struct Prop{
    static let sProperty = "スタティックプロパティ"
    let iProperty = "インスタンスプロパティ"
}

Prop.sProperty
Prop().iProperty
  • 構造体Propを定義します。
  • static let sPropertyでスタティックプロパティを宣言しています。
  • let iPropertyでインスタンスプロパティを宣言しています。
  • スタティックプロパティのアクセス方法は型名.プロパティ名のProp.sPropertyです。
  • インスタンスプロパティのアクセス方法はインスタンス.プロパティ名のProp().iPropertyです。