株式会社ゆめみさんのIOSコードチェック課題の概要をまとめる。
主にIssuesの初級にチャレンジしてリファクタリングしたいった。
- IDE:Xcode 13.21
- Swift:Swift 5.52
- 開発ターゲット:iOS 15.0
以下の4つについてソースコードを修正した。
- 可読性の向上
- 安全性の向上
- バグを修正
- FatVCの回避
ただし、今回自分の実力が及んでいなかったため
うまく実装しきれていないところもある。
その部分は苦労した部分、つまづいた部分などを記載しておくこととする。
- 今回は一人での作業だが、実務では共同開発が予想される
- 他人から見て何の作業をしていて何を変更したのかわかりやすい
という観点から今回はブランチをIssuesごとに分けて作業した。
1:Main
1-1:develop
1-1-1:feature/bug(バグを修正)
1-1-2:feature/safety(安全性の向上)
1-1-3:feature/readability(可読性の向上)
1-1-4:feature/FatVC(Fat VCの回避)
1-1-5:README.md(README.mdの作成)
このようなブランチの分け方をした。
(1-1は1のMainブランチの派生を表し、1-1-1は1-1のdevelopブランチの派生を表す。)
-
レイアウト修正に関しては、検索結果画面の詳細が画面上部にずれているという点を直した。オートレイアウトの”Add Missing Constraints”を使用して調整を行なった。
-
メモリリークに関しては循環参照をしている箇所を2箇所ほど"weak self"を加えて循環参照を防ぐことでメモリリークを防いだ。
-
パースエラーの箇所に関しては、特に自分は見つからなかったため特に何もしていない。
-
if letを用いることで安全にアンラップできるようにした。
-
不要なIUOを排除した。
1.命名規則の変更
1.1 クラス名をその画面の役割の名前に変更した。
- ViewController → SearchViewContlroller
- ViewController2 → ResultViewContlroller
2.2:省略されている変数を省略無しにした。
例)idx → index
3.3:改行、インデント
{ の後は1行あける
} の前の行は開けない
このように修正した。
こちらに関して今回一番苦労した。
<やったこと>
MVCモデルの適用をして、Modelに変数を保持した。
<やりたかったこと>
MVVMモデルの採用
- Model:データ保持
- ViewModel:プロトコルを用いて、基本的な処理はここで
- View:ViewModelのプロトコルに準拠させて、基本的にはViewのみを行う。
採用理由:SwiftUIでの共同開発をしていて、
そこで使っているモデルがMVVCモデルだったので自分が一番理解していた。
(過去にJavaでMVCモデルをやってみたが、扱いづらかった。)
<苦労した点>
SearchBarの処理やTableViewの処理を全てViewControllerでやっているため
FatVCが起きていると考えたためそこを分離させたかった。
SearchBarがSearchViewControllerに紐づいていたのを
うまくView Modelに紐付けを変更できなかった。
今回、初めてのstoryboardだったため、
不慣れな点が多く実装できないところもあった。
しかし、
MVVMやSwift言語自体は経験があったため
そこら辺に関しての知識不足が否めなかった。
特にFatVCを改善するために、
MVVMのモデル適応、
UIが白黒で醜いのでUI改善したいと考えた。
良いコードの書き方
Swiftのメモリリークについてまとめてみた - Qiita
【Optional型】アンラップの仕方や非Optional型との違い