構造体とは?
- 変数、定数、関数を1つのグループとしてまとめる仕組み。
- 構造体の中で作られた変数・定数を プロパティ 、関数を メソッド という。
- 構造体の中で作られた変数・定数を初期化することを イニシャライズ という。
- 構造体を利用するにはインスタンス化が必要。
- データ型は全て構造体である。(
Int
、Float
、Double
、String
、Bool
)
実装例
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 変数名 = 構造体名()
変数名.プロパティ名
変数名.メソッド名