【Swift】プロパティの種類!ストアドプロパティやタイププロパティとは?

この記事からわかること

  • Swiftプロパティとは?
  • プロパティの種類違い
  • ストアドプロパティ/コンピューテッドプロパティ使い方
  • インスタンスプロパティ/タイププロパティ使い分け

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

Swiftにおけるプロパティについてまとめていきます。

参考文献: 2.10.5. タイププロパティ | プロパティ | Swift

プロパティとは?

プロパティとは「属性/性質」と言った意味を持つ英単語であり、IT用語としてはオブジェクトの持つ設定や属性、データなどのことを呼びます。

Swiftもオブジェクト指向型のプログラミング言語です。言語仕様として他の言語にも見られるクラス(class)やSwift独自の構造体(struct)が用意されており、それら(オブジェクト)に対して任意のプロパティ(変数)とメソッド(関数)を定義することができます。

おすすめ記事:【Swift】構造体(struct)とは?クラスとの違いと使い方

Swiftでのプロパティはvarキーワードで変数として、letキーワードで定数として宣言できます。

class Company{
  // 再代入可能
  var name:String = "" 
  // 再代入不可
  let telephoneNumber:String = "090-xxxx-xxxx"  
}

プロパティの種類

こう見ると異なる4種類があるようですが、ストアドプロパティにインスタンスとタイプコンピューテッドプロパティにもインスタンスとタイプがある組分けになります。

ストアド/コンピューテッド

データの保持方法の違い

インスタンス/タイプ

参照条件の違い

ストアドとコンピューテッドの違い

まずはストアドプロパティとコンピューテッドプロパティの違いを見ていきます。

ストアドプロパティ(StoredProperty)

別名「格納型プロパティ」。データを保持する。

コンピューテッドプロパティ(ComputedProperty)

別名:「計算型プロパティ」。データを算出する。

両者の違いはデータを不変的な状態で保持するか常に計算された可変的な状態で保持するかです。

ストアドプロパティ

ストアドプロパティ(StoredProperty)はシンプルに値を保持するプロパティです。格納型と呼ばれるようにプロパティに対して数値や文字列などのデータを格納できます。

class Test {
  var stored:String = "Hello World"
}

コンピューテッドプロパティ

コンピューテッドプロパティ(ComputedProperty)は値を保持せずgetterと setterによって値を算出するプロパティです。クロージャーで計算式を渡すことができreturnを使って値を返します。getterとsetterは省略した記述することも可能です。

おすすめ記事:【Swift】基本構文を復習!タプルや変数の使い方、型の注意点#computedプロパティ

class Test {
  var computed:Int {
    let result = 2 + 5
    return result
  } 
}

インスタンスとタイプの違い

インスタンスプロパティ

インスタンスに紐付いたプロパティ

タイププロパティ

型に紐付いたプロパティ

両者の違いはインスタンス化した後に参照するかするかインスタンス化しなくても参照できるかです。

インスタンスプロパティ

インスタンスプロパティとは名前の通りインスタンス化した時に参照できるプロパティです。これまで使用してきたのがまさしくインスタンスプロパティになります。

class Company{
  var name:String = ""
}

var apple = Company()
apple.name = "Apple"

var google = Company()
google.name = "Google"

これはインスタンスごとに紐付いているので他のインスタンスとの繋がりは生まれません。

タイププロパティ

タイププロパティは型自身に紐付くプロパティです。複数のインスタンスを生成しても共通の値を保持させることができます。

Swiftではプロパティ宣言時にstaticキーワードを付与することでタイププロパティとして定義できます。

extension Company{
    static var area:String = "Japan"
}

print(Company.area) // Japan

タイププロパティとして定義したプロパティにはインスタンス化しなくてもドットシンタックスを使って値を参照することができます。

おすすめ記事:【Swift】プロパティオブザーバとは?willSetとdidSetの使い方

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

自作iOSアプリ

\ アプリをリリースしました /

mapping

自分だけの地図を作ろう!-mapping-

無料posted withアプリーチ

割り勘アプリ-bill-

旅行におすすめ!
割り勘アプリ-bill-

無料posted withアプリーチ

Imakoko

現在地を取得するアプリ!Imakoko

無料posted withアプリーチ

ふるログ

ふるさと納税管理アプリ-ふるログ-

無料posted withアプリーチ

Remind-シンプル通知アプリ-

シンプル通知アプリ-Remind-

無料posted withアプリーチ

CLIPURL

好きな記事をクリップしよう!-CLIPURL-

無料posted withアプリーチ

記録カレンダー

続けたを可視化できるアプリ!記録カレンダー

無料posted withアプリーチ

CART-共有できるお買い物リスト-

CART-共有できるお買い物リスト-

無料posted withアプリーチ

QuickPressPanel

早押しゲーム-QuickPressPanel-

無料posted withアプリーチ

貸し借り管理アプリ

友達とのお金の管理-貸し借り管理アプリ-

無料posted withアプリーチ

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

Githubにて
iOSアプリのソースコードを公開中!

自作Webアプリ

子育て知識共有サイト-mikata-

子育て知識共有サイト-mikata-

New Article

index