LoginSignup
5

More than 1 year has passed since last update.

構造体とは?

  • 変数、定数、関数を1つのグループとしてまとめる仕組み。
  • 構造体の中で作られた変数・定数を プロパティ 、関数を メソッド という。
  • 構造体の中で作られた変数・定数を初期化することを イニシャライズ という。
  • 構造体を利用するにはインスタンス化が必要。
  • データ型は全て構造体である。( IntFloatDoubleStringBool

実装例

struct Human {
    // プロパティを定義
    let name: String
    let age: Int

    // initを使用することでイニシャライザ定義
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }

    func introduction() {
        print("私の名前は\(name)です。年齢は\(age)歳です。")
    }

}
// Human構造体をインスタンス化
let human = Human(name: "山田太郎", age: 25)
// introductionメソッドへアクセス
human.introduction() // 私の名前は山田太郎です。年齢は25歳です。

定義方法

struct 構造体名 {
    // 構造体の定義
}

プロパティとは?

インスタンスプロパティ

  • 型のインスタンスに紐付くプロパティ
  • 型のインスタンスに紐付くため、インスタンス化しなければ使うことができません。

スタティックプロパティ

  • 型自身に紐付くプロパティ
  • 型の性質を表すプロパティを定義したいとき(大規模なプロジェクト以外はあまり使う機会がない?)
  • 静的という意味なので let を推奨

インスタンスプロパティとスタティックプロパティの違い

struct Human {
    // スタティックプロパティ
    static let name = "山田太郎"
    // インスタンスプロパティ
    let age = 25 
}
// スタティックプロパティへアクセス
Human.name // OK
Human().name // NG

// インスタンスプロパティへアクセス
Human.age // NG
Human().age // OK
  • 型名().プロパティ名(型名に()をつけることでデフォルトのイニシャライザが働き、インスタンス化される)

イニシャライザとは?

  • プロパティを初期化する為のもの(他の言語ではコンストラクタとほぼ同様)
  • インスタンス化時に実行される特殊なメソッド

書式

init(引数名: 型名, ...) {
    // selfは構造体自身のインスタンスを意味する
    self.プロパティ名 = 引数を使ったりする
}

メンバーワイズイニシャライザ

  • デフォルトで用意されている特殊なイニシャライザ
  • イニシャライザは定義しない
  • 単純な初期化ならメンバーワイズイニシャライザが使えるが、イニシャライザを定義すると使えなくなる

インスタンス化の方法

イニシャライザを定義していない時

let 変数名 = 構造体名()

イニシャライザを定義した時

let 変数名 = 構造体名(引数名: 型名, ...)

メンバーワイズイニシャライザを使用する時

let 変数名 = 構造体名(プロパティ名: , ...) // プロパティを直接指定する

アクセス方法

let 変数名 = 構造体名()
変数名.プロパティ名
変数名.メソッド名

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5