Swift Xcode 現場ではStoryboardでレイアウトを作りますか?という質問に対する回答


執筆のきっかけ

会社の同僚の方が私と同じ言語を勉強していて、色々質問された中で現場はStoryboardが多いですか? など質問をいただいて、その中で答えていく内容を記事にして同じような初学者に役に立てないかと思い、記事を書きました。

Storyboardで全て構築することが多いのか

結論から言うと現場によりますが、私はあまりこのプロジェクトファイルの設計を好みません。
というのも以下の点が問題点として挙げられると思います。

  • 画面が100件以上あるプロジェクトなど開くだけで処理が相当重くなる(効率ダウン)
  • 以前、Storyboardファイルを開くだけで勝手にレイアウトが変更される不具合があって影響範囲の調査が難しかった

これらの理由から私はStoryboardでの管理を基本的に行なっていません。

A案:xibファイルで管理し、コードで画面遷移を管理する

  • MainViewController.swift
  • MainViewController.xib

このようにViewController.swift+.xibをセットで保有しておいて、画面遷移する際はコードで生成して遷移します

        let vc = DetailViewController(isSelectedDeckModel: deckModel)
        self.navigationController?.pushViewController(vc, animated: true)NavigationControllerを利用している場合

B案:StoryboardでSegueを使って画面遷移する方法

ここでは紹介しませんが、前述のStoryboardを利用する方法です。

メリットとしては、A-B-C A-B-C'のような画面がある場合、視覚的に画面が遷移する画面を把握しやすいです。しかしながら、デメリットもあり、先述のようなデメリットと画面数が多いと把握がしにくい点があげられます。

アリの巣みたいになっているんですよ(震え声)

C案:合わせ技に近い案 Storyboardにxibファイルを紐づける

Storyboardでレイアウトファイルを扱わない為に、Storyboard上のViewControllerのContentViewを削除し、既存のxibファイルと紐づけます。

メリットとしてはStoryboardでレイアウト作業をせず、xibファイルでレイアウト作業を行えます。
処理が重くならない案ですよね。デメリット…とはいえませんが、強いて言うならコードで遷移する処理であれば1行でかけますが、Segue遷移の場合はSegue遷移の処理を用意してそこで分岐などを行う必要があります。コードがファットになる可能性があることです。

最終的に私はどうやっているのか

A案が多いですね。
以前、Storyboardファイルを開くだけで勝手にレイアウトが変更される不具合があって影響範囲の調査が難しかった

この不具合が相当キツかったです。その経験からこういう選択をしています。