2018年2月ごろから友人が運用しているアプリの改修に携わることになった。話があったのはもう5年前だが、その当時はちょうどSwiftがで初めてObject-cとの切り替えの時期でした。ネット上にも参考になるものがなく全く何もできませんでした。
もともとWebデザイナーでUIを専門にしていましたが、HTML、CSS、JSはなんとか出来た感じでした。
以前からプログラミングには興味があり、C#でアプリを作成した経緯もあり、今回改修に挑戦して見ました。
デザイナーでJSやPHPなどを多少囓った人間からするとSwiftはなんとも奇怪に映る言語です。
そこで、この数ヶ月Swiftに触れて現時点でわかったことをまとめたいと思います。
対象
- OS 10.13.3
- Xcode8
- Swift 3
わかったこと
SwiftはAutolayoutとコードで実装ができるのが厄介
当たり前だが、これがしれば知るほど厄介に感じる。SwiftはWindowsのVisualStudioと違ってレイアウトとコードが混在している。コードでも制御でき、さらにAutolayoutでも制御できるので実装としては強い意志でどちらかを貫く姿勢が必要になってくる。
さらに、私みたいな素人だと、どうしてもAutolayoutに走りがちで、Autolayoutで全てできると先入観が生まれてしまう。しかし、よくよく実装してみるとAutolayoutでは本当に表面的なことしかできなく、実際はコードを書かないと解決しない。
さらに、見た目の話なので、コードだけで済むかというとそうもいかない。
特にデザイン上の問題などを解決するのが非常に面倒になってくる。コードで処理した方が良いのかAutolayoutで対応した方がいいのかが状況に応じて対応しなくてはいけず、状況自体が把握できな場合安易な対応になる。それが後々命取りになる。
画面描画のタイミングに応じた画面設定
当初、なんのこっちゃと思っていたことが、やっと今になってなんとなく理解できてきた。
Swiftは「インスタンス化された直後」「画面が表示される直前」「画面が表示された直後」「別画面に遷移する直前」でそれぞれ表示状態を分けることができる。
さらに、直前の画面状態が遷移後の画面に影響を与えることになる。それが顕著に現れるのがナビゲーション周りである。
このこととさらに先ほどのAutoLayoutとの調整で、何がどう絡んでいるのかが複雑になってくる。
さらに、改修作業が間を置いた状態で、対応する人も違うと、さらに厄介になってくる。
当初から、コードの設計を明確にして、さらに、ガイドラインなどにまとめておくと非常yにやりやすく思った。
このことは、多分、画面が多岐にわたりナビゲーションが共通化されるという前提で言語自体が設定されているような気がした。
厳密な記述ルールと柔軟な実装方法
Swiftのせいなのか、Xcodeのせいなのか、記述ルールが厳密に決まっているのもSwiftの特徴だ。
まだ全貌を調べていないが色々と記述への警告が表示される。
例えば、1つのfunctionの中には40行までしか記述出来ないなど、通常の言語だとそこまで厳しくないが警告やエラーの元になる。
さらに、これを厄介にさせているのが、実装の方法が多岐に渡っていること。先のAutolayoutしかり、コードの記述にもいくつか方法があるようだ。
こうなってくると、修練を重ねて自分流の記述方法を編み出して行くしかなくなってくる。しかし、そこで属人性を発揮してしまうと、今後の運用で支障が出ることになる。
運用方法を考えながら、最適なコード実装を目指す必要があることがわかった。
まぁーエンジニアとしては当たり前のことなのだが、なかなか実現するのは難しい。