extensionの本来の目的は既存のライブラリ等に対して機能を拡張していくことだと思いますが、
(例えばCGRectにcenterプロパティを追加するなど)
それ以外にもソースの可読性をあげるために使われることもしばしばあります。
よくあるのが、プロトコルの実装をextensionで書くことです。
swift
1class ViewController {
2 // プロトコルに関係ない処理を記述する
3}
4
5extension ViewController: UITableViewDataSource {
6 // UITableViewDataSourceに関することだけを記述する
7}
正直なところextensionの意味合いとしては微妙かなと思いますが、
- Swift本家のソースでも使われている
- Xcodeでソース内の関数一覧などを出す部分と相性がいい(階層で出るため)
UITableViewDataSource
型の定義にすぐに飛べる
という理由で使われがちです。
それだとfuncに記述しても同じことではないのかなと思います。
私もその意見ですが(コメントで// MARK: - Hogeなどと書いてプロトコルを実装しても結果的にほとんど一緒、定義に飛べないのが残念程度)、多くの人はそう思ってはおらず、可読性が上がると信じています。