はじめに
どうも、どうまずです。
本当に書いた、汚いソース第2弾です。
今回はどんな怖いソースが出てくるのか・・・・
viewDidLoad
まずはこちらのソースをご覧頂きたい。
override func viewDidLoad() { super.viewDidLoad() mainCollectionView.delegate = self mainCollectionView.dataSource = self // xibの読み込み self.mainCollectionView.register(UINib(nibName: MainNibName.title.rawValue, ・・・ //以下略
おわかり頂けただろうか・・・
一見なんの変哲もないviewDidLoadですが、
書きすぎなんです
サンプルなどでも、delegateやdataSourceはviewDidLoadに記載されていることが多いのですが、本格的なアプリ開発になればなるほど、このviewDidLoadが長くなるんです。
そのため、ViewDidLoadに記載しなければならない処理は極力外だし・メソッド化して、読みやすくしとくようにしましょう。
修正後のソースは下記の通りです。
override func viewDidLoad() { super.viewDidLoad() collectionViewInitialize() // xibの読み込み self.mainCollectionView.register(UINib(nibName: MainNibName.title.rawValue, ・・・ // 中略 } func collectionViewInitialize() { mainCollectionView.delegate = self mainCollectionView.dataSource = self }
今回はちょっと過剰かもしれませんが、 viewDidLoadを簡素化しておくという発想が大切です。
さらに初期化でいろいろ記載することがあるようならば、 「Initialization Closure」という方法もあるようです。
参考サイト
例えば、下記のように単純なラベルを表示するコードがあるとします。
let testLabel = UILabel() override func viewDidLoad() { super.viewDidLoad() testLabel.text = "どうまず" testLabel.textColor = UIColor.blue testLabel.frame = CGRect(x: 0, y: 0, width: 100, height: 50) view.addSubview(testLabel) }
これもviewDidLoadの簡素化の観点からどうにかしたいソースです。
これを下記のように、クロージャで初期化しちゃいます。
let testLabel = {() -> UILabel in let label = UILabel() label.text = "どうまず" label.textColor = UIColor.blue label.frame = CGRect(x: 0, y: 0, width: 100, height: 50) return label } override func viewDidLoad() { super.viewDidLoad() view.addSubview(testLabel()) }
これでviewDidLoadには必要最低限の記載だけになりましたね。
私はaddSubViewを殆ど使ったことなかったので、こんなやり方もあるんだとちょっと驚きました。
ダイエット方法はいろいろありますね。頑張って痩せなきゃ・・・
注意
レビューアの観点によって、諸説あります。