カテゴリ: Swift 更新日: 2026/01/18

Swiftのextensionでイニシャライザ・メソッド・計算プロパティを追加する方法!初心者向け完全ガイド

Swift extensionでイニシャライザ/メソッド/計算プロパティ追加
Swift extensionでイニシャライザ/メソッド/計算プロパティ追加

先生と生徒の会話形式で理解しよう

生徒

「先生、Swiftのextensionって何に使うんですか?よく便利って聞くんですが、どう便利なんですか?」

先生

「extensionは既存のクラスや構造体に新しい機能を追加する仕組みです。たとえば、あとからイニシャライザやメソッド、計算プロパティを加えることができます。」

生徒

「えっ、既に完成しているクラスに後から足せるんですか?」

先生

「そうです。元のコードを直接書き換えなくても、まるで便利なアプリに“拡張機能”をインストールするように、新しい機能を追加できるのです。」

1. extensionとは?

1. extensionとは?
1. extensionとは?

Swiftのextension(拡張)は、既存の型(クラス、構造体、列挙型など)に対して新しい機能を追加できる仕組みです。Appleの公式ドキュメントでも「既存の型を拡張して新しい振る舞いを定義できる」と説明されています。

例えば、家の冷蔵庫に後から「冷凍室を追加」するイメージです。冷蔵庫(元のクラスや構造体)はそのまま使えるし、さらに便利な機能をつけ足せます。

2. イニシャライザをextensionで追加する

2. イニシャライザをextensionで追加する
2. イニシャライザをextensionで追加する

イニシャライザとは「初期化処理」を行う特別なメソッドです。extensionを使うと、既存の型に新しい初期化方法を加えることができます。


struct User {
    var name: String
    var age: Int
}

// extensionで新しいイニシャライザを追加
extension User {
    init(name: String) {
        self.name = name
        self.age = 0
    }
}

これにより、User(name: "太郎")のように年齢を省略して初期化できるようになります。拡張で追加したイニシャライザは、元の構造体を壊さずに柔軟さを増やします。

3. メソッドをextensionで追加する

3. メソッドをextensionで追加する
3. メソッドをextensionで追加する

次に、extensionでメソッドを追加してみましょう。メソッドは「動作」を表す機能です。例えばUser構造体に「自己紹介するメソッド」を追加できます。


extension User {
    func introduce() {
        print("私は\(name)です。年齢は\(age)歳です。")
    }
}

let user = User(name: "花子", age: 20)
user.introduce()

私は花子です。年齢は20歳です。

このように、extensionを使うと既存の型に「新しいふるまい」を自然に追加できます。コードを分割して整理する目的にも使われます。

4. 計算プロパティをextensionで追加する

4. 計算プロパティをextensionで追加する
4. 計算プロパティをextensionで追加する

計算プロパティとは、値を保持せずに、その場で計算して返すプロパティのことです。例えば身長と体重から「BMI」を計算するプロパティを追加してみましょう。


struct Person {
    var height: Double // メートル
    var weight: Double // キログラム
}

extension Person {
    var bmi: Double {
        return weight / (height * height)
    }
}

let p = Person(height: 1.7, weight: 60)
print(p.bmi)

20.761245674740486

このように計算プロパティを追加すると、メソッドのように呼び出さずに「プロパティ」として自然にアクセスできます。実際のiOS開発でも便利に使われます。

5. extensionの注意点

5. extensionの注意点
5. extensionの注意点

便利なextensionですが、いくつか注意点があります。

  • 既存のストアドプロパティ(値を保持するプロパティ)は追加できない
  • 元の型に定義されているイニシャライザを完全に置き換えることはできない
  • 役割ごとにextensionを分けて整理すると可読性が上がる

つまり、「新しい振る舞いを追加する」のが得意で、「元からある設計を根本的に変えること」はできないのがextensionの特徴です。

6. extensionを日常に例えると

6. extensionを日常に例えると
6. extensionを日常に例えると

初心者にもイメージしやすいように、日常生活での例えを出してみます。たとえば、自転車に「ライトをつける」「カゴをつける」といった後付けの改造をするイメージです。自転車の基本機能(走る)は変わりませんが、ライトをつければ夜道でも安心、カゴをつければ荷物も運べるようになります。

extensionも同じで、既存の型を壊さずに「あとから便利な機能を足す」ことができるのです。

カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinの構文ルールまとめ!インデント・セミコロンなど初心者が最初に覚えるべきポイント
New2
Kotlin
Kotlinの関数ドキュメンテーションコメント(KDoc)の書き方を徹底解説!初心者でもわかる丁寧なガイド
New3
Kotlin
KotlinでHello Worldを表示するには?最初の1行を実行してみよう
New4
Go言語
Go言語の依存関係管理を始めよう!go modの基本設定と導入手順
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語の関数パラメータ!値渡しと参照渡しの違いを理解しよう
No.2
Java&Spring記事人気No2
Kotlin
KotlinのAPI通信でGETリクエストを送る方法!初心者向け徹底ガイド
No.3
Java&Spring記事人気No3
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.4
Java&Spring記事人気No4
Swift
SwiftのURLSessionでのネットワークエラー対策!再試行とタイムアウトを初心者向けに解説
No.5
Java&Spring記事人気No5
Go言語
Go言語のテストでタイムアウト・並行処理を扱うポイント
No.6
Java&Spring記事人気No6
Go言語
Go言語のWebアプリにおけるセキュリティベストプラクティス集
No.7
Java&Spring記事人気No7
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.8
Java&Spring記事人気No8
Swift
Swift JSONデコード失敗の原因と対処|DecodingError徹底解説