スライドショー

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

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部としてこれまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説