3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Staticプロパティ swift

Last updated at Posted at 2021-05-06

#■staticプロパティ(タイププロパティ)とは
同じクラスから生成された複数のインスタンスで同じ定数を使えるようにするもの。

■インスタンスとは

class Abc {
   var name = ""
  static sInt = 0
}

//下記のabcにあたる部分  クラスAbcをインスタンス化してインスタンスabcが誕生してる。
var abc = Abc()
var abc2 = Abc()

//これで同じクラスから生成された複数のインスタンスが生まれた
//abcとabc2の事ね

これを踏まえて下記を見ていきましょう!

class Abc {
   var name = "名前なし"
  static sInt = 0

 func aaa() {
  print("\(name)\(Abc.sInt)歳です。")
 }
}

var abc = Abc()
var abc2 = Abc()

abc.name = "佐藤健"
Abc.sInt = 100

abc.aaa()
//結果: 佐藤健は100歳です。

abc2.aaa()
//結果: 名前なしは100歳です。

なぜこうなる?

■インスタンスプロパティはインスタンスを呼んで値を代入する。
abc.name = "佐藤健"

その場しのぎ
今回の場合はabcのインスタンス内でのみ変更されている。

■staticプロパティは直接型(ここではAbc)を呼んで値を代入している。
Abc.sInt = 100
というような書き方になる。

直接型を呼んで代入してるので
abcのインスタンスがなんや関係なく
とりあえずclassAbcの中のstaticプロパティそのものを変更してる。


これを踏まえると
abc2のインスタンスでaaaメソッドを呼んだ時
以前にstaticプロパティのそのものが100に変えられていたので
結果: 名前なしは100歳です。
と言う結果となった。

つまり
同じクラスから生成された複数のインスタンスで同じ定数を使えるようになった。

#■これを応用してちょっとだけ本格的にstaticを使う。
準備
このような画面を作ったとっする。
Buttonを押せばオレンジの画面から青い画面に遷移する。
スクリーンショット 2021-05-06 17.12.10.png

■class Akunを準備する。

class Akun {
    
    var name = "名前なし"
    static var sInt = 0  
}

オレンジ上のラベルをnameLabelとして紐づける。
オレンジ下のラベルをintLabelとして紐づける。
下記のようにコードを書く
スクリーンショット 2021-05-06 17.24.43.png

青い画面のコード

青い上のラベルをnameLabelとして紐づける。
青い下のラベルをintLabelとして紐づける。
下記のようにコードを書く

スクリーンショット 2021-05-06 17.23.32.png

■結果
オレンジ画面
nameLabelは佐藤健
intLabelは100
スクリーンショット 2021-05-06 17.26.02.png

Buttonを押して青い画面に遷移
nameLabelは名前なし
intLabelはstaticプロパティ使ってて
以前に100に直接値変えられているので100になった。

スクリーンショット 2021-05-06 17.26.09.png

同じクラスから生成された複数のインスタンスで同じ定数を使えている。

これがstaticプロパティ!!!!!!!!!

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?