技術ブログ

プログラミング、IT関連の記事中心

処理の共通化【Swift】

◾️はじめに

アプリケーションの開発を行っていると、だんだんと同じ処理を様々なクラス内で書くことが多くなってきます。
そのせいで、ソースコードの量が多くなり見返したときに読みづらいソースコードになってしまいます。
※このせいでバグの調査が難航したりと。。。

そこでここでは、処理の共通化の方法をいくつか記載します。

◾️Utilクラス

Utilクラスとは、共通の処理などをまとめたクラスのことです。
(他にも、Commonクラスなどといった言い方もあります。)

一例を挙げると、「生年月日のデータをもとに、現在の年齢を算出する」などの
どの画面でも関係なく共通的な計算を行うような処理ですね。

Utilクラスを作成する上で、注意する点としては、「メソッドはタイプメソッドにする」ということです。
タイプメソッドとは、メソッド定義の「func」の前に「class」をつけたメソッドのことです。
このように定義することで、クラスのインスタンスを生成しなくても呼び出すことができます。
※Utilは共通的なクラスなので、いちいちインスタンスを生成する手間が省けます。

以下が、Utilクラスの例です。
※「sample」メソッドのみ用意していますが、メソッドは幾つ用意してもいいです。

class Util {
    // funcの前にclassを付けるとタイプメソッド
    class func sample() {
        // 処理を記述
    }
}

以下に、タイプメソッドの呼び出し方法を記載します。

Util.sample()

◾️BaseViewController

画面ごとに毎回処理を行うものがある場合には、これも共通化した方がいいです。
このような場合には、Utilクラスで定義するよりも、BaseViewControllerとして定義した方が楽です。

一例を挙げると、画面表示時にユーザーがログインされているかを判定するなど。

具体的には、以下のようにUIViewControllerを継承して共通処理を記載するBaseViewControllerを定義します。
※以下の例では、「viewDidLoad」メソッドに共通処理を記載していますが、他のメソッドでも可能です。

class BaseViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // 共通処理を記載する。
    }
}

上記のBaseViewControllerを各画面のUIViewControllerを継承するクラスに対して以下のように記載します。

class ViewController: BaseViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

上記のように、継承を「UIViewController」から「BaseViewController」に変更する事で、「super.viewDidLoad()」の記載でBaseViewControllerに記載した共通処理が実行されます。

UITableControllerなども同様にする事で、処理の共通化が可能です。

◾️Const

アプリを作成していると、「接続先のURL」「DBのログイン情報」など、基本的には不変の値を利用する事がよくある。
その場合には、「定数クラス」を用意してその定数クラスに固定の情報を定数として定義する事で
もし変更があった場合でもメンテナンスが楽になる。

定数クラスは、以下のように「struct」で定義する。

struct Const {
    let AAA = "HELLO"
    let BBB = "WORLD"
}

上記の定数クラスを実際に使用する場合には、以下のように使用する。

// 定数クラスのインスタンスを生成する
let const = Const()

// 「定数クラスのインスタンス.定数名」で利用する事ができる
print(const.AAA)
print(const.BBB)