前回のブログでちらっとお話しましたが、最近 SwiftUI の勉強をはじめました。
そして、その虜になっています。

去年 SwiftUI が出た当初もちらっと触ってみたのですが、そのときは「UI が直感的に作れるな」くらいにしか思っていませんでした。

ただそろそろ登場して1年になろうとしていることもあり、本格的に触り始めたところかなり楽にコードが書けるようになったので、遅ればせながらも紹介していきたいと思います。

どこまでできるかわからないですが、ある程度シリーズ化していくつもりです。

初回である今回は、SwiftUI のメリットとデメリットについて書いていきます。

メリット1. データの更新が自動で View に反映される

これは MVVM で開発をしている人にとっては当たり前かもしれませんが、iOS アプリ開発ではそこまで浸透していなかったと思います。

これまでの UIKit の実装方法だと、非同期通信などでデータが更新されたらそれを手動で View にも反映させる必要がありました。
UITableView の reloadData メソッドは誰しも使ったことがあると思います。

SwiftUI にはデータの更新を監視する仕組みがあらかじめ用意されており、データの更新が自動で View に反映されます。

これにより、Viewのライフサイクルを気にして更新のタイミングを調整したり、最悪クラッシュしてしまったりということがなくなります。
プログラマが気にすべきことが一つ減るので非常に大きいと思います。

メリット2. レイアウトファイルも .swift なので読みやすい

既存の storyboard や xib ファイルは Xcode 上で見る分にはわかりやすいものの、実態は XML 形式のファイルであるため、人の目では何がなんだかわかりません。
もし複数人で開発していて、変更点がコンフリクトしていたら絶望ですよね。
私もこれまで複数人で開発するときは、同じレイアウトファイルを触らないように気をつけていました。

ところが SwiftUI だとレイアウトファイル(いわゆるViewクラス)も他のコードと同様に swift で書かれるので、人が見て理解しやすく、仮にコンフリクトしても直すことが容易です。

メリット3. コーディング中に動的なUIのプレビューが見られる

XcodeでSwiftUIのコードを書きながら、右側のプレビューで写真のぼかし・彩度・コントラストなどを調整する画面

Xcode の右側にプレビュー画面が表示されるかと思いますが、これは今までの xib のような単なる静的プレビューではなく、コード中の変数などに応じて動的に変化します。

上の画像エフェクトを試すサンプルコードの例だと、blurValue の値を変更すればプレビュー上でも画像にぼかしが入ります。

もっと言うと、画像を URL から取得するようにした場合でも、ダウンロード後の画像が表示されます。

さらに右下にある再生ボタンを押すと、シミュレータを起動しなくともその画面を操作することができます。

SwiftUIのプレビュー画面。スライダーで彩度・コントラスト・明度を変えると、上の海辺の写真の見た目がすぐに変わる

メリット4. リスト表示が驚くほど簡単

UIKit でリスト表示を実装しようとすると UITableView を使うことになると思います。

ただ UITableView ってdelegate や datasource を実装する必要があって、単純なリストを作るにも結構な手間がかかっていましたよね。
(私も iOS 勉強したての頃、ここでつまずきました)

SwiftUI の場合はそのような難解な実装は必要ありません。
最低限の実装だけだと、下記でリスト表示が実装できてしまいます。

List {
    Text("hogehoge")
    Text("fugafuga")
}

もちろん実際に使うには ForEach で回したり、中身の View を作ることになりますが、それは UIKit 方式でも同じことです。

アプリエンジニアであれば、この簡潔さに多少なりとも驚きを持ってくれるかと思います。

 

いくつかメリットを紹介してきましたが(もちろんこの他にもたくさんメリットはあると思います)、デメリットも一応書いておきます。

デメリット1. 対応 OS が iOS13 以降

SwiftUI で作られたアプリは、同じタイミングでリリースされた iOS13 以降でしか動作しません。

これが今まで私が避けてきた理由でもあり、一般的にもまだ浸透していない理由でもありますが、iOS14 の話題も上がってきているので、そろそろ導入できる案件も出てくる頃かなと感じています。

このデメリットについては、来年にはあまり気にならなくなるでしょう。

デメリット2. UIKit のパーツ全てが SwiftUI 化しているわけではない

まだ新しいということもあり、SwiftUI には存在しないものもあります。

例えば、2020/7 時点で UIPageViewController や、UIActivityIndicatorView に相当するものは SwiftUI にはありません。

とはいえ UIKit を SwiftUI から呼び出すこともできるので、正式に対応されるのを待ちつつも、実装で困ることはなさそうです。

 

…とここまで SwiftUI のメリットとデメリットをご紹介しました。

新しく iOS アプリ開発を勉強する方はもちろん、既に iOS アプリエンジニアの方も、今のうちに SwiftUI を身に着けておくことをおすすめします。