Struct(構造体)とは
構造体とは、簡単に言うと複数の値を一つにまとめたものです。
特徴としては次のようなものが挙げられます。
- 参照することができない
- 値渡しである
- イニシャライザ・関数も使用可能
基本の形
//定義 struct Sample { let name: String let id: Int init(name: String, id: Int) { self.name = name self.id = id } func printID() { print(id) } } //使ってみる let test = Sample(name: "高橋", id: 22089) test.printID()//22089と表示される
インスタンス化時にletとvarの宣言での影響を受ける
構造体の中で定義していたnameとidをvarで宣言しなおして、
構造体を使うときの宣言をvarとletにして比べてみます。
//定義 struct Sample { var name: String var id: Int init(name: String, id: Int) { self.name = name self.id = id } func printID() { print(id) } } //使ってみる var test1 = Sample(name: "トーマス", id: 4000) test1.id = 30001 test1.printID()//30001と表示される let test2 = Sample(name: "高橋", id: 5000) test2.id = 100000 test2.printID()//エラーになる
構造体の中身がvarで宣言されていても、インスタンス時にletで宣言してしまうと、値を更新できなくなります。
関数を使って構造体の値を変更する際の注意点
mutatingをfuncの前につけないと変更を受け付けないので注意が必要です。
//定義 struct Sample { var num: Int init(n: Int) { self.num = n } /* func plus1() { num += 1 print(num) } */ mutating func plus2() { num += 2 print(num) } } var test1 = Sample(n: 1) test1.plus1()//エラー test1.plus2()//動く