はじめに
今回は、スタティックプロパティを理解するためにインスタンスプロパティも一緒に動かしてみたので、
比較しながら理解を深めていけたらなと思います。
試してみたコードの説明
比較のためにインスタンスプロパティaとスタティックプロパティbを用意します。
関数getは、aとbの値の変更内容を表示するためのものです。
struct Sample {
var a = 0
static var b = 0
func get() -> String {
return "aが\(a)、bが\(Sample.b)"
}
}
インスタンスプロパティaを変更してみた
//3種類のインスタンスを作成します。
var S1 = Sample()
var S2 = Sample()
var S3 = Sample()
//もちろん結果は同じです。
S1.get() //"aが0、bが0"
S2.get() //"aが0、bが0"
S3.get() //"aが0、bが0"
//S2だけ変更を加えてみます。
S2.a = 3
//S2.aの部分のみが変更されています。
S1.get() //"aが0、bが0"
S2.get() //"aが3、bが0"
S3.get() //"aが0、bが0"
//変数aにアクセスしようとすると、S1.aかS2.aかS3.aになる。
//インスタンス化したものに紐づいてアクセスするので、値の変更があった場合はそのインスタンスごとに変更になる。
//結果を見てもS2.aだけ変更されている事がわかる。
スタティックプロパティbを変更してみた
Sample.b = 6
//全てのbが変更されている。
S1.get() //"aが0、bが6"
S2.get() //"aが3、bが6"
S3.get() //"aが0、bが6"
//staticプロパティのbにアスセスするには、Sample.bになる。S1.bとアクセスする事はできない。
//インスタンスではなく、元の型自身に紐づいているプロパティである事がわかる。
//変更結果をみても、元になる型の内容を変更していることになるので、全ての値が変更されている事がわかる。