【Swift】staticとは?使い方や他との違い、活用シーンをわかりやすく解説!

Swiftで便利に使えるキーワードのひとつが static です。

特に「クラスや構造体に関連する処理を、インスタンスを作らずに使いたい」という場面で役立ちます。

この記事では、static の基本的な意味や使い方、他との違い、活用シーン、注意点までをわかりやすく丁寧に解説します。

staticとは?

static は Swift におけるキーワードのひとつで、「型に属するプロパティやメソッド」を定義するために使います。

通常のプロパティやメソッドはインスタンスを生成してからアクセスしますが、static を付けたものは インスタンスを作らずに型から直接アクセス できます。

つまり、「その構造体(またはクラス)自体に紐づく処理やデータ」を表現したいときに使います。

具体例:定数や共通処理を定義する

下記は、static を使って定数とメソッドを定義した例です。

上の MathUtility の例は、static を使って 定数や共通処理を「型そのもの」に結びつけている パターンです。

インスタンスを作らなくても使えることがポイントで、MathUtility.piMathUtility.square(5) のように、型名から直接アクセスできます。

もし、これをstaticを使わずに使う場合は下記のようにMathUtilityをインスタンス化して使う必要があります。

指定の仕方

static はメソッド・プロパティ両方に対して使えます。

また、列挙型でよく使われる static var allCases や、構造体での static func にも応用されます。

活用シーン

static は「インスタンスごと」ではなく「型そのもの」に結びつけたい値や処理を定義するときに使います。

つまり「共通のもの」「全体でひとつだけのもの」を表すのに適しています。

  • ユーティリティ構造体の中で定数や共通関数を提供する
    例:MathUtility.piMathUtility.square() のように、共通の数値や計算式をまとめる。
  • 共通の設定値やフラグを管理する
    例:アプリ全体で使う API のエンドポイント URL、アプリのバージョン番号など。
  • インスタンスごとではなく、全体で共通の情報を持ちたいとき
    例:ゲームで「最高スコア」を全体でひとつだけ保持したい場合。
  • SwiftUI の Color.primaryFont.largeTitle のようなプリセット定数を定義するとき
    Apple が提供しているシステム定数も static を利用しており、インスタンス化せずにすぐ呼び出せるようになっています。

要するに、static「グローバルに使いたいものを型にまとめておく」 ための仕組みです。

もし「インスタンスごとに別の値を持ちたい」なら static をつけず、通常のプロパティやメソッドとして定義します。

class との違い:classキーワードとの使い分け

クラス(class)で static を使うと、そのプロパティやメソッドは「オーバーライド不可」になります。

一方で、class キーワードを使うことで「オーバーライド可能な型メソッド・プロパティ」を定義できます。

つまり:

  • static → 継承されても 上書き不可
  • class → 継承されて 上書き可能

という違いがあります。

プロジェクトで継承を意識する設計をしている場合は class を使うことがありますが、構造体や列挙体には static のみ使えます。

注意点

static は便利な一方で、次のような注意点があります。

  • インスタンスごとの状態は持てない
    static は「型にくっついている」ので、ユーザーごと・画面ごとに違う値を持たせたいときには使えません。
  • どこからでもアクセスできるため、使いすぎると管理が大変になる
    便利だからと何でも static にすると「この値はどこで変わったの?」と追いにくくなり、コード全体が散らかりやすくなります。
  • クラスではオーバーライドできない
    static を付けたメソッドはサブクラスで上書きできません。もしクラスの継承でオーバーライドしたいなら、class キーワードを使う必要があります。

つまり、「全体で共通していて変わらないもの」や「複数の場所から同じように使いたい処理」に絞って使うのがベストです。

まとめ

今回は Swift の static(型メソッド・型プロパティ)について詳しく紹介しました。

  • static は型(構造体・列挙型・クラス)に属するメソッドやプロパティを定義するためのキーワード
  • インスタンスを生成せずに型名から直接アクセスできる
  • 構造体・列挙体では static のみ、クラスでは static or class を選べる
  • クラスの class キーワードはオーバーライド可能な型メンバを定義するために使う
  • 定数・共通処理・プリセット値・テスト用データなど、再利用性の高い場面で活用される

初心者の方もぜひ、共通処理や定数定義に static を活用してみてください。

コードがより整理され、読みやすくなりますよ!

おすすめの記事