try! Swift行くので読んだ。
読んだ理由としては、業務でiOSアプリ作らなくなってから大分経ってて、自分でアプリ作り始めてはAuto Layout難しい……となって投げ、最近やっとAuto Layout分かってきてちまちまとアプリ作りつつある程度の状態でtry! Swift行くのもアレだなと思っていて、アプリのコードがgithubで公開されているのでせっかくだし〜ということで読んだ。
そんな感じなので役に立つこと書いてないと思う。
メモりながら読んでたので、ブログタイトル通りメモとして公開するかという感じ。
全体的に
普通のアプリを適切に作っているという感じで勉強になった。アプリ自体がシンプルなのでコード量も少なくて読みやすかった。
画面
全体的にTableViewで作ってある。
何かを一覧する画面じゃなくても、表示するコンテンツのサイズが変わるから、Cellを幾つか組み合わせてスクロール可能なUI作ってる。
表示するコンテンツのサイズが変わらなくても、多画面対応とか、途中でデザイン変更されるとかもあるから、大体の画面をTableViewで作っちゃっても良いのかなと思った。適切にView(Cell)を分けてれば他の画面でも使えるパーツ作れるし。
スケジュールみたいにPagerTabがある画面は、scrollViewを置いてPagerTabStripViewController
のcontainerView
っていうoutletをつないでいた。buttonBarView
はViewControllerのコード上で設定している。
全てStoryBoardでやってるのかと思ったけどWebDisplayViewController
はxib使ってた。
色んな文脈で使えるようなのはxibみたいな使い分けなのかもしれない
画面遷移
画面遷移にはsegue使ったり使わなかったりしてて、使い分けがよく分からなかった。
trySwiftApp/SessionsTableViewController.swift at master · NatashaTheRobot/trySwiftApp · GitHub 画面遷移にsegueを使ってない
遷移先の画面に渡す情報があるならこの方法の方がシンプルでいいのかなって思ったけどtrySwiftApp/SpeakersViewController.swift at 379ef41a331e230a2a4994a103a30cc4d978457a · NatashaTheRobot/trySwiftApp · GitHubでは同じ人が書いたコードでsegue使ってるし良く分からん。
CellReuseIdentifierなど
String(TableViewCell)
で"TableViewCell"
というStringを得られるの知らなかった。
nibNameとReuseIdentifierを同じにして、Cellのクラス内にlet identifier = "TableViewCell"
とかやってたんだけど、この方法良い。
ViewController
ViewControllerにoverride以外のちょっとしたメソッドを生やしたい場合はprivate extension
を使っている。デリゲートメソッドも同じで、ごちゃごちゃしなくて良い。
表示するデータ
Modelsの中のクラスに一通りベタ書きしてある。 こういうデータはDBなどを使うものっていう思い込みがあったので、見ると結構ビビる。
アプリの要件として「オフラインでも使えるようにする」みたいなのがなければ、次回以降はSwiftで書かれたAPIから情報取得するようになったりするのかな。って思ったけど開発コスト高まるから無さそう。
CIなど
テスト無いしCI回してないしふむふむ〜って感じだったけど、長期運用するようなものでも無いしテスト書くコストとアプリの要件考えると必要性低いのかなるほど〜と思った。
lintくらいはやってもいいのではーとも思った、lintの設定で揉めたりしそうだし、良識あるエンジニア数人でこの規模のアプリなら問題になることも少なそう。
次回以降のために〜とかも思ったけど、次回開催の頃にはiOSとかSwiftとか要件とか色々変わってて、1から作ったほうが良さそうという感じでCI要らんなという感じ。
絵文字
if #available(iOS 9.2, *)
で表示する絵文字を分けてるんだけど、理由がよく分からなかった🤗
そんな感じでtry! Swiftの受付が朝早くて、最近11時とかに起きてるので頑張りたいと思う。