開発効率を上げる!Swiftでextensionを使って機能を拡張する方法

初心者向けにSwiftでextensionを使って機能を追加する方法について解説しています。クラスを拡張する際に便利で、継承との違いについても説明しています。実際にコードを書いて解説しているので、参考にしてみてください。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が1,000以上あります。

Swiftでextensionを使う方法について解説しています。

extensionを使うことで、クラスを拡張することができ、効率よく開発を行うことができます。プロジェクトが大きくなればなるほど役に立つはずです。

継承との違いについても理解しておきましょう。

 

なお本記事は、TechAcademyのiPhoneアプリ開発オンラインブートキャンプの内容をもとに紹介しています。

 

extensionとは

extensionとは「拡張」という意味です。

その意味の通り、extensionを使うと既存のクラスや構造体、列挙型に新たにメソッドやプロパティを追加することができます。

メソッドやプロパティを追加する機能として「継承」をイメージされる方が多いですが、クラスのメソッドやプロパティを引き継いで新たなクラスを別名で作るのに対し、extentionは名前はそのままでメソッドやプロパティを追加できることが特徴です。

 

extensionの書き方

extensionを使う場合は、次の様に型名の前にextensionをつけます。

extension SampleType {
  // 新たなメソッドやプロパティをここに記述します。
}

 

[PR] iPhoneアプリの開発で挫折しない学習方法を動画で公開中

実際に書いてみよう

メソッドの追加

今回は以下のクラスを拡張していきながらextensionを説明していきます。

//学生クラス
class Student {
    var name = "John Smith"  //学生の名前

    //名前出力メソッド
    func printName() {
        print(name)  //学生の名前を出力
    }
}

学生の名前をプロパティとして、学生の名前を出力するメソッドを持っています。

では、ここから学生クラスを拡張していきます。

次の例では、Studentというクラスに名前を更新するメソッドを追加しています。

extension Student {
    func updateName(newName:String) {
        name = newName  //引数で受け取った新しい名前でnameを上書き
        print(name)  //更新した名前を出力
    }
}

 

では、実際にこのメソッドを実行します。

//Studentクラスのインスタンスを作成
var student = Student()
//名前を出力
student.printName()  //結果:John Smith

//名前を更新して出力
student.updateName(newName:"Mario Rossi")  //結果:Mario Rossi

 

プロパティの追加

次の例では、先ほどと同じStudentというクラスに名前の文字数をカウントするプロパティを追加しています。

//学生クラスを拡張
extension Student {
    //学生ID
    var nameCount:Int {
        get {
            return name.characters.count
        }
    }
}
//Studentクラスのインスタンスを作成
var student = Student()

//名前の初期値である「John Smith」の文字数をカウント
print(student.nameCount) // 結果: 9

 

extensionの使い方について解説しました。複数人での開発、大規模な開発作業で便利なので、使い方を知っておくと良いでしょう。

また、TechAcademyでは初心者でも最短4週間でオリジナルアプリが作れるiPhoneアプリ開発オンラインブートキャンプを開催しています。

期間中は現役エンジニアのメンターが毎日学習をサポートするので、独学よりも効率的に学ぶことができます。