swift でシングルトンクラスをつくってみる
シングルトンクラスの定義
- 遅延実行で生成するパターン
import Foundation class NetworkErrorAlertControllerManager : NSObject { static var sharedManager: NetworkErrorAlertControllerManager = { return NetworkErrorAlertControllerManager() }() override private init() { } func hoge(){ } }
シングルトンクラスのメソッドの呼び出し
NetworkErrorAlertControllerManager.sharedManager.hoge()
よく使うクエリパラメータ系のメソッドを使い回せるようにする
ページネーションがあるAPIを作るとき毎回書くのが大変なので共通化した。
base_controller.rb
に書いておくと、他のコントローラから使い回せて便利。
def params_page params[:page].try(:to_i).presence || 1 end def params_site_ids params["site_ids"].try(:split, "_" ).presence || [] end
自分で作ったクラスで Enumerable モジュールを include して使う
class CatList include Enumerable def initialize(*cats) @cats = cats end def each for v in @cats yield v end end end cats = CatList.new( "mike", "cha", "tora" ) p cats.map(&:upcase) # => ["MIKE", "CHA", "TORA"]
セマンティックバージョニング2.0.0
仮にバージョンを A.B.C としたとき
参考
あるクラスのインスタンスメソッドの一覧を取得する
class Human def say p "hello" end end p Man.instance_methods(false) # => [:say, :age=]
任意のクラスが include しているモジュール一覧を表示
p Array.included_modules # => [Enumerable, Kernel]
ContainerViewController のスニペット
import UIKit class ParentViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } // コンテナビューコントローラに追加 func addViewController(vc: UIViewController){ self.addChildViewController(vc) vc.view.frame = self.view.frame // 子ビューのframe を設定する必要がある self.view.addSubview(vc.view) vc.didMoveToParentViewController(self) } // コンテナビューコントローラから削除 func removeViewController(vc: UIViewController){ vc.willMoveToParentViewController(nil) vc.view.removeFromSuperview() vc.removeFromParentViewController() } }
手順通り追加処理をしないと, contentViewController の viewDidLoad がよばれなかった。
参考
https://developer.apple.com/jp/documentation/ViewControllerPGforiOS.pdf