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
これを、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
extension で定義した関数を使って、Date 型の変数からフォーマットした文字列が取得できていますね。
以上、Swift の Extension についてご説明しました。