【Swift入門】構造体(struct)の使い方を理解しよう!

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)の使い方を忘れてしまったら、この記事を思い出してくださいね!

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次