プロトコルは、クラスにメソッドの実装を義務付けるものでしたが、
エクステンション(
Extension)は、クラスに直接メソッドを付け加えてしまう機能です。これは使い方も非常に簡単で、こんな具合に記述します。
extention クラス名 {
……追加内容……
}
「
クラス名」には、機能を追加するクラス名を指定します。実に簡単ですね。
追加できるのはメソッドだけでなく、プロパティもOKです。ただしプロパティの場合は、「
Computedプロパティ」のみが追加可能です。メソッドのようにget/setの処理を用意するタイプのプロパティのことでしたね。
このエクステンションは、自作のクラスだけでなく、Swiftのシステムライブラリとして用意されているクラスや、iOSのフレームワークのクラスなどもそのまま拡張してしまうことができます。
例として、
Intクラスを拡張して、1からその数字までの合計を得るメソッド
getTotalを追加してみましょう。下にそのリストを掲載しておきます。
ここでは、
extension Intというようにして
Intクラスを拡張しています。こうすることで、
Int型の値全てに
getTotalメソッドが追加されるようになります。
var num = 1234というように普通に作成した
Int変数も
getTotalが使えるようになっていることがわかるでしょう。あるいは、例えば「100までの合計を調べたい」というときにも、ただ「
100.getTotal()」と実行するだけです。
Intや
Stringといった、Swiftのもっとも基本的なものについても、このようにエクステンションで簡単に機能を追加することができるのです。