#プロパティとは
簡単に言うと 型に紐付いた値
のことです。例えば下のように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
という宣言はエラーになります。スタティックプロパティは必ず、宣言時に初期値を設定しないといけません。
#最後に
非常に簡単にではありますが、プロパティの基本を押さえてみました。
具体的な使用例に出会えたら追記しますー。
間違った記述などがありましたら、是非教えてくださるとありがたいです。
#参考にした記事
https://qiita.com/pitto/items/218db772c829d4b83470
#追記 2021/6/5
こちらの記事でセルのidentifier
をスタティックプロパティで宣言していて便利でした。