Swift の Extension

ここでは Swift の Extension についてご説明します。

Swift の Extension を使う

Swift の Extension を使うと、既存の class、struct、enum などに機能を追加することができます。

既存のコードを変更せずに機能を追加したい時や、ソースの管理のしやすさのために機能を分けたい時などに便利です。


Extension は次のような構文で追加することができます。

extension タイプ名 {
    // 追加の機能
}

タイプ名には extend するクラス名などが入ります。


それでは、実際に Extension を使って、Date クラスに機能を追加してみます。

Date 型をフォーマットされた文字列を取得する方法を「Swift で日付(Date)をフォーマットされた文字列(String)に変換する」でご紹介しました。

シンプルな変換は以下のコードできます。

import Foundation

let date = Date()

let df = DateFormatter()
df.dateFormat = "yyyy-MM-dd HH:mm:ss"

print(df.string(from: date))

実行結果は次のようになります。

2023-08-16 20:14:00

Swift の Extension 1


これを、Date クラスの Extension として実装してみます。

extension Date {
    func toString(format: String) -> String {
        let df = DateFormatter()
        df.dateFormat = format
        return df.string(from: self)
    }
}

extension Date { ... }で Date クラスに機能を追加しています。

format 用の文字列を入力引数として受けとって、日付をフォーマットした文字列を返す、toString 関数を定義しています。


そして次のように、この extension で定義した関数を使って、Date 型の変数から、フォーマットされた文字列を取得できます。

date.toString(format: "yyyy-MM-dd HH:mm:ss")

以下のコードを実行してみます。

import Foundation

extension Date {
    func toString(format: String) -> String {
        let df = DateFormatter()
        df.dateFormat = format
        return df.string(from: self)
    }
}

let date = Date()
let dateStr = date.toString(format: "yyyy-MM-dd HH:mm:ss")

print(dateStr)

実行結果は次のようになります。

2023-08-16 20:25:26

Swift の Extension 2


extension で定義した関数を使って、Date 型の変数からフォーマットした文字列が取得できていますね。


以上、Swift の Extension についてご説明しました。

© 2024 iOS 開発入門