はじめに
久しぶりにブログでプログラミングの記事を書くような気がする...
今回は趣味で開発しているアプリでTraitを実装することがあったのでそれのアレ
Trait とは 形質
実装し終わったら「あ〜そういう意味か。」というような納得できました。ミックスイン的なやつらしいです。
内容
- Reachabilityを使って各UIViewControllerでネットワークステータスを確認する
- ネットワークステータスに変更があればそれに対応した動作をさせる
ざっとこれ
準備
サンプル
CustomViewController.swift
import UIKit class CustomViewController: UIViewController { fileprivate var reachability = Reachability.forInternetConnection() override func viewDidLoad() { super.viewDidLoad() reachability?.startNotifier() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) NotificationCenter.default.addObserver(self, selector: #selector(networkStatusChange(_:)), name: NSNotification.Name.reachabilityChanged, object: nil) } deinit { reachability?.stopNotifier() NotificationCenter.default.removeObserver(self, name: NSNotification.Name.reachabilityChanged, object: nil) } ・・・ // MARK: - Reachability's notification target method func networkStatusChange(_ sender: Notification) { let networkStatus = reachability?.currentReachabilityStatus() if networkStatus == NotReachable { return } something() } }
だいたいこんな感じの内容
今回はオンラインになったときに以下で作成する something()
メソッドを呼び出す形
UIViewController+Reachability.swift
とりあえずクラス拡張としてファイルを生成しました。
import UIKit protocol ReachabilityStatusChange { func something() } // これをコメントアウトした場合は、各UIViewControllerに付加することで同じような処理が可能 extension UIViewController : ReachabilityStatusChange {} extension ReachabilityStatusChange where Self : UIViewController { func something() { print("オンラインになった!") } }
最後に
これですべて動作させたいクラスファイルに関して something()
メソッドの実装を書くことがなくなった。幸せになれた。
ぶっちゃけUIViewControllerにそのままextensionでメソッドを引っ付ければ問題ないのだが...