22 構造体
dotinstall.com
構造体とは
- クラスとほぼ似た感じでプロパティやメソッドをまとめたデータ型
- プロトコル、イニシャライザーなども使える
- 構造体の宣言は
struct
クラスとの違い
- メソッドの中で自信のプロパティを書き換えることが出来ない
- 書き換える場合は明示的に指示
func
の前にmutating
- 継承が出来ない
- コピーするときの挙動が違う
- クラス:参照渡し
- 構造体:値渡し
- わかりやすいが、大きな構造体だとコピーするたびにメモリを圧迫するので注意が必要
struct UserStruct {
var name: String
var score: Int = 0
init(name: String) {
self.name = name
}
mutating func upgrade() {
score++
}
}
class User {
var name: String
var score: Int = 0
init(name: String) {
self.name = name
}
func upgrade() {
score++
}
}
var hoge = User(name: "Hoge")
var hoge2 = hoge
hoge2.name = "hoge2"
hoge.name
var huga = UserStruct(name: "Huga")
var huga2 = huga
huga2.name = "huga2"
huga.name
クラスと構造体の使い分け
- 継承が必要、大きなデータを扱う -> クラス
- シンプルなデータ -> 構造体