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

\業界最安級/
月額2,980円のプログラミングスクール

✔ 業界最安値の月定額2,980円
✔ 「Q&A掲示板」で平均30分以内に回答がもらえる
✔ 月に一度の「オンライン相談」で悩みを解決
✔ 教材の数は30種類以上
✔ 入会金不要+いつでも退会OK

公式サイトはこちら

Writer

侍テック編集部

株式会社SAMURAI

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

あなたの目的に合わせた
SAMURAI ENGINEERの運営サービス

SAMURAI ENGINEER Pro

未経験でも挫折しないプログラミングスクール

詳細はこちら

SAMURAI TERAKOYA

日本最大級のサブスク型オンラインITスクール

詳細はこちら

SAMURAI ENGINEER Freelance

「一人で稼げる」スキルを身につける

詳細はこちら
Close