変数の型を調べる記事で、type(of: )を紹介したけど、クラスの型にも使えるよ。
今回はそれプラス is についてを見てみるよ。
swiftでクラスを比較する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Human { } // Humanクラスを継承 class Man: Human { let sex = "man" } let man = Man() print(man is Man) // true print(man is Human) // true print(type(of: man)) // Man |
こんな感じで指定のクラスかどうかを is クラス名 で判別できるよ。
Humanもtrueになってることから、継承元(スーパークラス)もtrueになることがわかるね。
これはこれで良いんだけど、特定のクラスのみを判別したい場合はtype(of:)を使うよ。
継承元を無視した特定のクラスのみを比較する
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class Human { } // Humanクラスを継承 class Man: Human { let sex = "man" } let man = Man() print(type(of: man)) // Man print(type(of: man) == Man.self) // true print(type(of: man) == Human.self) // false |
今度はHumanがfalseになるのがわかる。
こんな感じで、type(of: インスタンス) == クラス名.self で比較ができるよ。
それぞれの違いを理解しつつ使い分けをしよう。