Swift 入門 | プロトコルと拡張 | プロトコルと拡張の組み合わせ

プロトコルと拡張を組み合わせると、便利な設計ができる。

拡張はメソッドやプロパティだけでなく、プロトコルも追加できる。複数の既存の型に共通の機能を実装し、まとめて処理できる。

protocol MyDataPrintable {
    func printData ()
}

extension String: MyDataPrintable {
    func printData() {
        print("문자열 : \(self).")
    }
}

extension Int: MyDataPrintable {
    func printData() {
        print("숫자 : \(self).")
    }
}

var str = "Hello"
var num = 12345
str.printData()
num.printData()

この例では、printData メソッドを持つ MyDataPrintable プロトコルを宣言している。続いて拡張を使い、StringInt にプロトコルへの準拠を追加している。

extension String: MyDataPrintable {...}
extension Int: MyDataPrintable {...}

すべての String 値と Int 値を MyDataPrintable として扱える。異なる型を同じプロトコルを通じて統一的に処理できる。

プロトコルと拡張は、自作クラスを強化するだけではない。Swift に含まれる型を独自にカスタマイズすることもできる。