キャンペーンの今のうちに是非!!↓


⇒「ひろゆきの名著『1%の努力』を無料で全部読む方法

【Swift奮闘記ep11】プロパティ後半(型プロパティ、プロパティの監視)

IPhoneアプリ作成Swift奮闘記

読み進めていく本↓

前回⇒「【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の意味が少しわかった気がする!

「監視」というか、前後に処理を実行することができるってだけで特に監視っぽさはないな。監視って言葉のチョイス他になかったのかね!

プロパティ・オブザーバー!完了っす!

メソッド

はい、きたきたー!メソッド!・・・何?きてないって?次回にしようって?

・・・次回にするよー。

続き⇒「【Swift奮闘記ep12】メソッド(インスタンスメソッド、Selfキーワード、型メソッド)

コメント