SNOOZE LOG

iOS中心のプログラミング関連技術メモ

Swiftで、class、staticキーワードの使い分けについて

Swiftで、class、static両者をどういったシーンで使いわけるか。

静的なアクセスを提供

いずれも使用することで静的にアクセス可能な変数/メソッドの宣言ができます。

// インスタンス化せずアクセスできる。静的な変数・メソッド。定数、ユーティリティメソッドの宣言に使用されることが多いと思います。
Some.somePropery
Some.someMethod()

classとstaticメンバは相互呼び出しが可能で、その性質からいずれも静的にアクセスやデータが確保されていることがわかります。 機能の違いについては、こちらの記事が参考になります。

【Swift】classとstaticの挙動の違いを整理する - Qiita

どんな時に使えるか

staticキーワード

(1)enum、struct、classで「静的なプロパティ」「静的なメソッド」を宣言したい場合に使える。
(2)宣言したもののoverrideは出来ない。

classキーワード

(1)classで「静的なプロパティ(Computed Propertyのみ)」「静的なメソッド」を宣言したい場合に使える。enum、structでは使えない。
(2)finalと合わせて、宣言したもののoverrideの可否が制御出来る。

どう使い分けるか

ベースクラスにおけるstatic funcと、final class funcは機能的に同じことから、
enum/structではstaticを使う。
・classでも基本的にstaticを使い、overrideが必要な変数/メソッドの場合にのみclassに変更する。

で良さそうです。

stackoverflowでの議論も参考になりました。
Static vs class functions/variables in Swift classes? - Stack Overflow