Swiftにはクラスとよく似た機能として構造体(struct)があります。
この記事では、
- 構造体(struct)とは
- 構造体の使い方(初期値なし)
- 構造体の使い方(初期値あり)
- 構造体でイニシャライザを定義する方法
- structとclassの違い
というように、構造体の基本的な解説から応用的な使い方に関しても解説していきます。今回はそんな<構造体(struct)の使い方についてわかりやすく解説します! ※この記事ではSwift3.1を使用しています。
構造体(struct)とは
構造体(struct)とは、クラスと同様にカプセル化を実現する方法として提供されている機能です。カプセル化とは、簡単に説明するとデータをオブジェクトの内部に隠して、容易に値を変更できなくするための入れ物のことです。
structの書き方
struct 構造体名 { var num1:Int; var num2:Int = 100; var str:String; init(value: Int) { val = 150 } }
classとの大きな違いとしては、
- structは継承ができない。
- structはデイニシャライザ(クラスのインスタンス破棄)ができない。
- classは参照型、structは値渡し。
などが挙げられます。
構造体(struct)の使い方
ここでは構造体(struct)の基本的な使い方を紹介します。
初期値なし
structはclassと同様インスタンスを作成して呼出します。structに初期値が設定されていない場合は、インスタンス作成時に初期値を指定します。
サンプルプログラム
//structの定義 struct FruitPrice { var apple:Int; var orange:Int; var melon:Int; var pineapple:Int; var banana:Int; } //インスタンスを作成して初期値を指定する let price = FruitPrice(apple: 100, orange: 150, melon: 700, pineapple: 450, banana: 200) print("apple : (price.apple)") print("orange : (price.orange)") print("melon : (price.melon)") print("pineapple : (price.pineapple)") print("banana : (price.banana)")
実行結果:
apple : 100 orange : 150 melon : 700 pineapple : 450 banana : 200
サンプルプログラムのように、structのインスタンス作成時に初期値を指定すれば、値が参照できることがわかりますね!
初期値あり
続いて、structに初期値がある場合のサンプルです。structにあらかじめ値が設定されている場合は、インスタンス作成時に引数を指定する必要はありません。
サンプルプログラム
//structの定義 struct FruitPrice { var apple:Int = 100; var orange:Int = 150; var melon:Int = 700; var pineapple:Int = 450; var banana:Int = 200; } //インスタンスを作成 let price = FruitPrice(); print("apple : (price.apple)") print("orange : (price.orange)") print("melon : (price.melon)") print("pineapple : (price.pineapple)") print("banana : (price.banana)")
実行結果:
apple : 100 orange : 150 melon : 700 pineapple : 450 banana : 200
イニシャライザを定義
イニシャライザは、initメソッドと呼ばれる特別なメソッドを呼出して、値を初期化するときに使用します。イニシャライザはclassとstructで使用することができます。
サンプルプログラム
//structの定義 struct Area { var radius: Int // 半径 var pi: Double // 円周率 // イニシャライザ init(radius: Int, pi: Double) { self.radius = radius self.pi = pi } } //インスタンスを作成 let val = Area(radius:100, pi: 3.1415927) print("radius : (val.radius)") print("pi : (val.pi)")
実行結果:
radius : 100 pi : 3.1415927
structとclassの違い
構造体(struct)とクラス(class)はよく似た機能のため、どちらを使えば迷ってしまいますね。前述したようにclassは参照渡しができますが、structは値渡しとなります。また、classは継承できますがstructは継承ができません。
そのため構造体(struct)は、
- 簡単な値のカプセル化
- 値を参照するのではなくコピーしたい場合
- 継承する必要はない
などの場合に使用すると良いでしょう。
まとめ
ここでは構造体(struct)について、
- 構造体とは
- 構造体の使い方(初期値なし)
- 構造体の使い方(初期値あり)
- 構造体でイニシャライザを定義する方法
- structとclassの違い
などについて解説しました。構造体はクラスのように複数の値をオブジェクトで管理できるため、非常に便利です。もし、構造体(struct)の使い方を忘れてしまったら、この記事を思い出してくださいね!