ども木村です。この記事ではSwiftにおける構造体(struct)の使い方について解説します。
本記事のサンプルスクリプトはPlaygroundで実行しながら見ていただくことを推奨しています。Playgroundの導入/使い方についてはこちらを参考ください。
ども木村です。この記事ではSwiftにおける構造体(struct)の使い方について解説します。
本記事のサンプルスクリプトはPlaygroundで実行しながら見ていただくことを推奨しています。Playgroundの導入/使い方についてはこちらを参考ください。
本記事の実行環境は以下になっています。
- Xcode Version 12.3
- Playgrounds Version 3.4.1
- macOS Version 11.4
構造体(struct)の使い方
基本的な使い方
独自の型を自分で設計して、利用したい場合は構造体と言われる仕組みを利用します。
以下の例では、人間(Human)という構造体を作り、そこに名前(name)という変数を設定します。
struct Human {
var name: String
}
構造体を使用する場合は以下のように記載します。
struct Human {
var name: String
}
var human = Human(name: "kimura")
print(human.name)
構造体の中で定義した変数は、構造体の中で別の変数の処理で利用できます。
以下の例では、構造体アクセス時に設定したisFlgの値をflgResultが参照して結果を返却するような実装になっています。
struct Human {
var name: String
var isFlg: Bool
var flgResult: String {
if isFlg {
return "OK"
} else {
return "NG"
}
}
}
let human = Human(name: "kimura", isFlg: false)
print(human.flgResult)
構造体の変数の変更を検知する
didSetを使えば、構造体の中の変数に変更があるたびに、特定の処理を実行することが可能です。
struct Human {
var name: String {
didSet {
print(name)
}
}
}
var human = Human(name:"kimura")
human.name = "test1"
human.name = "test2"
構造に関数を定義する
構造体の中にも関数を設定することができます。
以下の例では、関数内で定義した関数totalnum()でnumに設定された値に処理行い、その結果を返却します。
struct Money {
var num: Int
func totalnum() -> Int {
return num * 1000
}
}
let wallet = Money(num: 3)
print(wallet.totalnum())
構造体の変数を関数から変更する
構造体の変数を関数から変更する場合、関数に対しmutatingを適応します。
まず、mutatingを適応しなかった場合どうなるか以下のスクリプトを実行してみてください。
struct Human {
var name: String
func changeName() {
name = "Tanaka"
}
}
var person = Human(name: "Kimura")
person.changeName()
このような実行はエラーになります。関数から構造体の変数の変更は通常許されていないため、この場合関数にmutatingを適応します。
struct Human {
var name: String
mutating func changeName() {
name = "Tanaka"
}
}
var person = Human(name: "Kimura")
print(person.name)
person.changeName()
print(person.name)