LoginSignup
1
5

More than 3 years have 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 変数名 = 構造体名()
変数名.プロパティ名
変数名.メソッド名

参考

1
5
0

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
  3. You can use dark theme
What you can do with signing up
1
5