Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
class の基本 / init() / deinit()
Swiftの『class』(クラス)は参照型のデータ型です。構造体と異なり、複数の変数が同じインスタンスを参照できます。初期化には『init()』、後処理には『deinit()』を定義します。
構文
class クラス名 {
// 格納型プロパティ
var プロパティ: 型
// イニシャライザ
init(プロパティ: 型) {
self.プロパティ = プロパティ
}
// デイニシャライザ(インスタンス破棄時に呼ばれる)
deinit {
// クリーンアップ処理
}
// メソッド
func メソッド名() {
// 処理
}
}
構文一覧
| 構文 | 概要 |
|---|---|
| class 名前 { ... } | クラスを定義します。 |
| init() { ... } | イニシャライザ(コンストラクタ)を定義します。 |
| deinit { ... } | デイニシャライザ(インスタンス破棄時に呼ばれる)を定義します。 |
| === / !== | 同一のインスタンスかどうかを比較します(恒等演算子)。 |
| 参照型(共有セマンティクス) | 代入や引数渡しで参照先が共有されます。 |
サンプルコード
class BankAccount {
let owner: String
var balance: Double
init(owner: String, balance: Double) {
self.owner = owner
self.balance = balance
print("\(owner) のアカウントを作成しました")
}
deinit {
print("\(owner) のアカウントを破棄しました")
}
func deposit(_ amount: Double) {
balance += amount
print("入金 \(amount)円 → 残高 \(balance)円")
}
func withdraw(_ amount: Double) -> Bool {
if balance >= amount {
balance -= amount
print("出金 \(amount)円 → 残高 \(balance)円")
return true
}
print("残高不足")
return false
}
}
// インスタンスの作成
let alice = BankAccount(owner: "Alice", balance: 10000)
alice.deposit(5000)
alice.withdraw(3000)
// 参照型: 同一インスタンスを共有
let sameAccount = alice
sameAccount.deposit(1000)
print("Alice の残高: \(alice.balance)") // 同じインスタンスなので変わっている
// 恒等演算子で同一インスタンスか確認
print("同一インスタンス: \(alice === sameAccount)")
let other = BankAccount(owner: "Bob", balance: 0)
print("別インスタンス: \(alice !== other)")
概要
クラスは参照型であるため、変数に代入しても新しいコピーは作られず、同じインスタンスを参照します。これは struct(値型)との最大の違いです。
『deinit』はインスタンスがメモリから解放されるタイミングで自動的に呼ばれます。ファイルのクローズやリソースの解放などの後処理に使います。クラスは継承できますが struct は継承できません。継承が不要な場合は struct を優先するのが Swift のスタイルです。
クラスの継承については継承 / override / final / superを参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。