読み進めていく本↓
前回⇒「【Swift奮闘記ep10】第4章Swiftとオブジェクト指向プログラミング(型、クラス、プロパティの前半)」
前回はプロパティにかなり手こずった。今回もプロパティが残っているものの、メソッドがメインなので簡単に済ませていきたいところ。
プロパティ後半
前回前半として、格納型プロパティと計算型プロパティを見てきた。今回は型プロパティ、プロパティの監視について見ていこう。
型プロパティ
説明を見たが全く理解できない。
クラスで型プロパティを定義して、インスタンス化したらインスタンスごとに独自のプロパティを持つ的な?だからどうなるの?わかりませーん!
意味わからんポイント↓
- 型プロパティはインスタンスが持つわけではなく、クラス自体が持つ唯一のプロパティになります。
- 1つの方のプロパティはそのプログラム内では1つしか存在しないことになります。
はい、どちらも意味わかりませんが、このまま進んでみよう。
※追記
1つめの疑問については、型プロパティは全部のインスタンスで共通のプロパティとして使われるので、例えばaというインスタンスで型プロパティの値を変えたら違うインスタンスbにおいて型プロパティを使う際は値が変わっている、ということになる。
型プロパティは共同で使う、というイメージ。
2つめの疑問については具体例がよくわからないので、なんとも言えないけど、1つめの疑問の答えと同じでそれぞれのインスタンスごとにプロパティの内容を変えることはできないよ、という意味だと思う。
型プロパティの定義の仕方
static var プロパティ名 = 値
これで型プロパティを定義する。staticつけて変数(または定数)を定義すればいいだけ、簡単。
型プロパティの取得の仕方
クラス名.プロパティ名
インスタンスのプロパティの場合はインスタンスの後に「.プロパティ」で取得できたのだがな。
では実際にコードを見てみよう。
class Car {
static var a = 4
}
let b = Car.a // 定数bに型プロパティaの値を代入(2を代入)
Car.a = 6 // 6を代入
Car.a // 6が表示される
どんな場面で使うかがわからないので、あまり意味はわからないが、格納型プロパティで行ったように各インスタンスでそれぞれのプロパティを使うことはできない事はなんとなくわかった。
型プロパティは各インスタンスで共有する感じは納得したかも!値変えたら、他のインスタンスでも値変わるわけだし!多分!
プロパティの監視
プロパティを監視(プロパティ・オブザーバー)することができるらしい。今のところよくわからない。
説明を見ると、監視とはつまり、代入の直前と直後に何か処理ができるということ。
ってことは例えばプロパティに値を代入した後に、その値が適切なものかを検査することができる…的な?
willSet{}とdidSet{}が直前と直後に実行するコード。それぞれnewValueとoldValueが使えるらしい。
具体的にコードを見てみよう。
class Car {
var speed: Int = 0 {
willSet {
print(“時速\(newValue)km”)
}
didSet {
print(“時速が\(speed – oldValue)km増加“)
}
}
}
変数speedの初期値を0に定義しているが、その後変数speedに代入するっていう記述がなくてもどんどん代入して行くっていうことなのかね?
※追記
today.speed = 50がspeedプロパティに値を代入しているってことだよね。
実際にインスタンス化して指示を出してみよう。
var today = Car()
today.speed = 50
today.speed = 70
こうするとnewValueに50が代入されて、oldValueに70が代入されるんだな。
リザルトバーには
Car
Car
Car
コンソールには
時速50km
時速が50km増加
時速70km
時速が20km増加
newValueとoldValueの意味が少しわかった気がする!
「監視」というか、前後に処理を実行することができるってだけで特に監視っぽさはないな。監視って言葉のチョイス他になかったのかね!
プロパティ・オブザーバー!完了っす!
メソッド
はい、きたきたー!メソッド!・・・何?きてないって?次回にしようって?
・・・次回にするよー。
コメント