プロパティとは
簡単に言うと 型に紐付いた値のことです。例えば下のようにTestっていう型をclassで定義してみます。
class Test {
var message = "This is Test"
func alert() {
print(message)
}
}
Test型のプロパティとは変数strと関数notifyのことです。
プロパティにアクセスするにはインスタンスを生成して、.プロパティ名とします。
let test = Test()
test.message
test.alert() //This is Test が出力される
もう少し細かいことも紹介します。
スタティックプロパティ
__スタティックプロパティ__とは 型自身に紐付くプロパティのことです。
またこれに対して__インスタンスプロパティ__があります。こちらは型のインスタンスに紐付くプロパティのことです。
インスタンスプロパティ
インスタンスプロパティは一番最初に紹介したようなプロパティです。よりインスタンスに紐付いた状態が分かりやすいサンプルコードが下のものです。
let test1 = Test()
let test2 = Test()
test1.message = "This is Test1"
test2.message = "This is Test2"
こんなふうにTestクラスのインスタンスそれぞれに値を持たせることができます。
じゃあスタティックプロパティならどうなるのか...?
スタティックプロパティ
プロパティの宣言時にstaticキーワードをつけたものは、__スタティックプロパティ__になります。
class Test {
static var message = "This is Test"
func alert() {
print(Self.message)
}
}
Selfキーワードはインスタンスからスタティックプロパティにアクセスする時に必要なものです。
これでさっきのように値を変更しようとすると
let test1 = Test()
let test2 = Test()
test1.message = "This is Test1" //ここでエラー
エラーが出て、インスタンスからスタティックプロパティにはアクセスできません。
その代わり、直接スタティックプロパティにアクセスして値を変更することができます。
let test1 = Test()
let test2 = Test() //ここまではmessageの中身は"This is Test"
Test.message = "Changed message"
test1.alert() //Changed message
test2.alert() //Changed message
とこんな感じです。まさに型に紐付いてるということが分かりますね。
でもstatic varを使うと急に全部のインスタンスの値が変わるので不都合ありそうですね。普通に共通に値を持たせるならstatic letにしてインスタンスからアクセスできないようにするのか安全な気がします。またはインスタンスからのアクセスを制限したいなら、privateキーワードをつけるのがいいのかも。ここらへんはもう少し勉強します。
ちなみに
static let message: String
という宣言はエラーになります。スタティックプロパティは必ず、宣言時に初期値を設定しないといけません。
最後に
非常に簡単にではありますが、プロパティの基本を押さえてみました。
具体的な使用例に出会えたら追記しますー。
間違った記述などがありましたら、是非教えてくださるとありがたいです。
参考にした記事
追記 2021/6/5
こちらの記事でセルのidentifierをスタティックプロパティで宣言していて便利でした。