UITableViewをExtensionを使って実装する方法

2016.12.10
uitableviewをextensionで実装する記事のアイキャッチ

こんにちは、プログラマーの@Yuuです。

iPhoneアプリ開発で切っても切り離せない「UITableView」。
今までにUITableViewの使い方の記事やカスタムセルの実装方法の記事を書きました。

UITableViewは非常に便利なのですが、いかんせん1つのViewController内に実装しようとするとコードが長くなり可読性が悪くなります。

そういう時に使えるのが「Extension」!

Extensionを使うとUITableViewを実装する際に、可読性を上げつつ処理の切り分けも行って上で実装する事が出来るようになります

文字で書くと大層な事をやるように感じられますが、やる事は簡単ですのでご安心を。

今回の解説を行う環境は以下の通りです。

  • OS:macOS Sierra 10.12.1
  • Xcode:8.1
  • Swift:3.0

UITableViewを普通に実装するとこんなに長くなる

以前の記事「UITableViewの使い方」で書いたコードを今回はExtensionを使って実装してみます。

その時に使ったコード↓
(Swift3の書き方に変更しています)

これだけでも中々コード量ありますよね。
コメントアウトもありますし、このコードでは未使用のdidReceiveMemoryWarningメソッドやviewDidLoadメソッドを書いたままという事もコード量増加の原因になっていますが。

しかし、普段の開発の際にはこれ以外にもコードを大量に書いていきます。
そのためUITableViewのデータソースメソッドやデリゲートメソッドが別に書けるだけでも可読性が上がりそうじゃないですか?

そこで使用するのが「Extension」になります。

Extensionを使ってTableViewを実装する

Extensionを使って実装する前にExtensionについての説明を簡単に。

Extensionとは

Extensionを使う事で既存のクラスにメソッドを追加したり、プロパティを追加する事が出来ます。
「Extension」という英語は「拡張・拡大・延長」という意味がありますが、文字通りクラスを拡張する事が出来ます

個人的に以下の文章が非常に分かりやすいなと思ったので引用させて頂きます。

拡張(エクステンション)とは、既存のクラスや構造体、Enumからデータ型まであらゆるものに対して、名前はそのままにプロパティやメソッドを追加する機能である。

プロパティやメソッドを追加する機能といえば「継承」をイメージするが、「継承」はクラスのプロパティやメソッドを引き継いで新たなクラスを別名で作るのに対し、「拡張」は名前はそのままにプロパティやメソッドを追加することができるのが特徴である。

【Swift】拡張(エクステンション)の使い方。クラスからデータ型まであらゆる機能を拡張する。 | はじはじアプリ体験記より引用

実際にExtensionを使って実装

具体的にどのように実装するかというと「UITableViewを実装したいViewControllerクラスを拡張し、そこにUITableViewのデリゲートメソッドやデータソースメソッドのみを書く」という事をします。

以下が実際のコードになります。

20行目からがExtensionを使った実装です。

やっている事は単純ですよね。
UITableViewのデリゲートメソッドやデータソースメソッドを別に分けて書いただけのようなものなので。

ただ「たったこれだけで可読性上がるの?」と疑問に思われるかもしれません。
この書き方の利点は今回のようにUITableViewだけではなく、UITextFieldやUITextViewなど複数のデリゲートを一緒に実装する場合に特に威力を発揮します。

実際に以下のような実装が可能になります。

44行目からが追加したコードになります。

このように書く事で「UITextField」の処理はUITextFieldDelegateをextensionで実装したところに。「UITextView」の処理はUITextViewDelegateをExtensionで実装したところに。
というように処理の切り分けが出来るようになります。

処理の切り分けが出来れば自然と可読性も上がりますし、Extensionでの実装もそこまで難しくないので、積極的に使っていきましょう!

Extensionを使う場合の注意点(Swift3以降)

Swift3で変更が加わった事でprivateな値・メソッドを使う際の注意点です。

privateな変数やメソッドをExtensionで拡張したクラス内でも使いたい場合、Swift2まではprivateで定義したものも使用出来たのですが、Swift3以降ではfileprivateと定義する必要があります

あとがき

Swiftの勉強を始めたばかりの頃は「Extensionなんて使う機会ないだろう」ぐらいに思っていましたが、今回のような使い方を知ってよく使うようになりました。

このようなデリゲートをExtensionを使って実装する方法は、UITableViewだけに限らず色んな場面で使える手法のなので積極的に使っていきましょう!

ではでは
今回はこの辺で!ヽ(•̀ω•́ )ゝ✧

uitableviewをextensionで実装する記事のアイキャッチ

この記事が気に入ったらいいね!
して最新情報をチェックしよう!

スポンサーリンク