ども木村です。この記事ではSwiftUIにおけるクラス(Class)の使い方について解説します。
本記事のサンプルスクリプトはPlaygroundで実行しながら見ていただくことを推奨しています。Playgroundの導入/使い方についてはこちらを参考ください。
本記事の実行環境は以下になっています。
- Xcode Version 12.3
- Playgrounds Version 3.4.1
- macOS Version 11.4
クラス(Class)の基本構造
クラスは以下のように実装します。クラスを作るルールとして、クラスにプロパティ(変数)を定義する場合は、必ず初期化処理を実装する必要があります。
class Car {
var number: String
var maker: String
init(number: String, maker: String) {
self.number = number
self.maker = maker
}
}
let car = Car(number: "213453", maker: "TOYOTA")
クラスの継承
あらかじめ実装したクラスの構造と全く同じクラスを複数作成したい場合は「継承」と呼ばれる方法を活用します。
例えば上記で実装したクラスCarは非常に抽象的な形で定義されています。
もしかしたら車(Car)はメーカーごとに用意したいケースが発生するかもしれません。
そんな時はクラスCarの構造をそのまま利用することで、クラスごとに全く処理内容の異なるような構造を定義することがなく、同じような形でクラスを定義することができます。
具体的には以下のように実装します。
class Toyota: Car {
init(number: String) {
super.init(number: number, breed: "Toyota")
}
}
安全で明示的なコードの記述が必要となるので、super.init()を使って子クラスから親クラスに対してデータの変更を及ぼしていることを記載する必要があります。
オーバーロード
すでに定義した親クラスの関数の処理内容を更新したい場合はオーバーロードを実装することで実現することができます。
まずは以下のような親クラスが実装されていたとします。
class Car {
func klaxon(){
print("fooo!")
}
}
今回はklaxonメソッドの処理内容を以下のように変更します。
print("booo!")
親クラスを継承して以下のように小クラスで親クラスのklaxonメソッドの処理内容を変更します。
class Toyota:Car {
override func klaxon(){
print("booo!")
}
}
クラスの継承を禁止する
継承やオーバーロードはとても便利な機能ですが、他の開発者によって勝手に継承され独自のクラスを作られてしまう可能性もあります。
finalキーワードを使用することでクラスの継承を禁止させることができます。
class Car {
final func klaxon(){
print("fooo!")
}
}