Protocol、Extensionなど、通常のオブジェクト指向とは少し違った概念がSwiftにはあり、
それらを理解できるようになるために、なんとなく図式化して考えてみました。
Extension (拡張)
例えば、Extensionは拡張という意味で、既存のclassに対して機能を独自で追加するといったことができます。
上記のように、拡張は継承ではないです。
例としてAppleはSwiftのクラスでUIColorというクラスを定義しています。
このclassではUIColor.blueとやると、青色で表示してくれます。
ただすでにAppleがすでに用意してくれているものしか利用できないです。
なので独自でカラーピッカーだったり、rgbαや#111111のようなカラーコード、16進数表記で独自に色を定義したい場合があります。
そういう場合に機能として既存のクラスに対して拡張することができます。
他には整数の計算処理などで、Intクラスがあるが、
少数第2位で表示するという場合の機能を独自で追加したりもあるかなと思います。
宣言の仕方は、
extension UIColor{ }
Protocol (約束)
protocolはその名の通り、約束事や決め事という意味で、
このProtocolを特定のクラスで継承した場合は、
Protocolで指定したメソッドを必ず実装しないといけないというものです。
なので、
UITableViewDelegateクラスを見てみると、
宣言はProtocolとなっており、
UITableViewDelegateクラスを継承すると、
実装しないといけないというエラーがでます。
※ Optional宣言しているメソッドは実装しなくても良いという意味です。努力目標。
Protocolの宣言方法としては、classと同じように宣言ができるので、
protocol aaa{ }
そしてProtocolはExtensionでもclassでも使用でき、Protocolを適用したいクラスでは、継承することになります。つまりは、
class Person: aaa{ }
という感じです。