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


⇒「ひろゆき『1%の努力』を無料で見る方法

【Swift奮闘記ep17】ストラクチャ(ストラクチャの定義、できること、参照型と値型の違い、プロパティ・イニシャライザ)

IPhoneアプリ作成Swift奮闘記

この本を見ながら進めてる↓

前回⇒「【Swift奮闘記ep16】継承について(クラス・イニシャライズの継承、オーバーライド、superキーワード)

継承については、解決しないわからないポイントが一個あったが大体オッケーだったが。

今回はストラクチャ。

 

ストラクチャの定義

ストラクチャとは、シンプルな「値」を表現するための型のこと。

クラスよりできることが狭められているが、クラスの劣化版というわけではなく、クラスとストラクチャは使い道が違うだけ。とのこと。

説明よりも実践、ということでコードを見て行こう。

クラスと形はほとんど同じ。

さらにインスタンス化する方法やプロパティ・メソッドを使う方法などはクラスと同じ。

え、じゃあクラスと何が違うの。。。?

そんな疑問にぶち当たる。

 

ストラクチャでできること

  • プロパティの定義
  • メソッドの定義
  • サブスクリプトの定義
  • イニシャライザの定義
  • エクステンションによる機能拡張
  • プロトコルへの準拠

上記は全てストラクチャでできることで、クラスと使い方は同じである。

あと、ストラクチャは継承ができないこと、型プロパティを定義するときは「クラス→class」で「ストラクチャ→static」であることを覚えておこう。

※追記

クラスとストラクチャの違い

ストラクチャはクラスの劣化版というわけではなくて、それぞれ使い道が違う。

クラスは「機能や仕組みのまとまり」を表現するのに適していて、ストラクチャは「」を表現するのに適している。

格闘ゲームで例えると、「Aボタンを押すとパンチが出る」「Bボタンで必殺技」っていう機能を設定するのがクラスで、「体力が100あって、そこから攻撃を受けると20ずつ減っていく」みたいな値に関してはストラクチャ。

 

参照型と値型の違い

クラスとストラクチャの大きな違い・・・らしい。

説明を読むとよくわかった。違い、納得!

まずはクラスのコード。

carBの値を変えるとcarAの値も一緒に変わってしまう。

それに対してストラクチャのコード。

fuelAの値をfuelBに代入するとき、fuelAの中身を「複製」してfuelBに入れる。この感覚はスッときた。覚えておこう。

あと、値型にはインスタンスを定数に代入した場合、プロパティを変更できなくなる

理由は謎だけど、ストラクチャは定数にインスタンスを代入したらプロパティは変更不可。覚えとこ。

 

プロパティとイニシャライザ

クラスとではプロパティを定義する際に値が入っていないとエラーになる。

ストラクチャはエラーにならない。

同様にクラスではイニシャライザを持つ場合、引数を定義しておかなければいけないが、ストラクチャの場合、定義しなくてもいい。

その代わりストラクチャはインスタンス化する際に引数を指定することとなる。

てことでどんな初期値を入れるかはインスタンス化するときにインスタンス化する人に任せる的な。

 

最後に

ストラクチャは結構あっという間に終わってしまった。

大体の部分は理解できた気がする。

クラスの利点、ストラクチャの利点を理解して長所を生かすような使い方をしていけばいいんだね!(そのうち使いこなせるようになるのかな〜?)

次回は列挙型。列挙型も値型だよ!

続き⇒「【Swift奮闘記ep18】列挙型について(列挙型の定義やswitch文を使ったマッチング)

コメント