14
9

More than 1 year has passed since last update.

UIkit経験者がSwiftUIを始める際に参考になる情報のまとめ

Last updated at Posted at 2022-07-10

書籍

1人でアプリを作る人を支えるSwiftUI開発レシピ

WWDCのセッションの内容がコンパクトにわかりやすくまとまっているので、これだけでも十分と言えますが、SwiftUIに関連するXcodeの使い方は載っていないので、そこはWWDCやチュートリアルで補完すると丁度良くなります。

Apple公式

チュートリアル

WWDC

2021

2020

2019

サンプルアプリ

サンプルアプリの中にXcode14が必要なものがあるので、事前にインストール推奨
https://developer.apple.com/tutorials/sample-apps

ドキュメント

SwiftUIで何が出来るか引き出しをたくさん用意すると便利なので、索引でもいいのでさらっと流し読み
https://developer.apple.com/documentation/swiftui/

記事関連

SwiftUIはバージョンアップごとに大きな変更が入っているので、記述が変わっているという前提で読むとよいでしょう。

Qiita

アーキテクチャ

MVVM

VIPER

view.bodyの組み方について

そこそこの画面をbodyに直接書いてしまうと、読みにくいのでコンポーネントごとにviewを組み立てるようにするのを推奨。
UIkitの頃はカスタムViewを用意して、awakeFromNib()などに装飾コードを書いたりすることが多くなりがちですが、bodyにそれを書いてしまうとわかりにくくなるのでコンポーネントにする。
アトミックデザインを頭の片隅におきつつ、ある程度整理整頓できていれば良いかなと個人的に思います。
モバイルアプリ開発において宣言的UIフレームワークを利用する際のコンポーネント粒度についての考察

プレビューをどこまで整備するか

こんな感じにプレビュー用のViewModelを用意し、中身をAPIが返すデータに差し替えたりすると現実に即したプレビューができる反面、APIが変更になった時にデータ修正が必要になってくるので注意。スタブ用のVMを用意せずとも実VMを使っても良い(ただし、欲しいデータが必ずしも取得できるとは限らない)

モックデータはPreview Assets.xcassetsに入れとくとプレビューの時だけ使えるようにできるのでおすすめ。

protocol ViewModelProtocol {
  var items: [Item] { get }
}

struct SampleViewModel: ViewModelProtocol {
  @Published items...実APIから取得
}

struct SampleViewModelStub: ViewModelProtocol {
  @Published items...Preview用のjsonを変換したのを返す
}

struct ContentView: <ViewModel: ViewModelProtocol>: View {
    @ObservedObject private var viewModel: ViewModel
    
    var body: some View {
        Text("Hello")
    }
}

struct SampleView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView(SampleViewModelStub())
    }
}

UI Debug

view.bodyに直接printは書けないので、以下を参照
https://zenn.dev/bannzai/articles/20557106b4ba7b
https://ameblo.jp/kamekame0912/entry-12567283588.html

TIPS

SwiftUIにおけるテスト

推奨iOSバージョン

iOS13/14をサポートする場合、UIkitで当たり前に使える機能が標準実装されていなく、15から色々使えるようになってきているので特段の理由がなければ15からが推奨

  • 非同期画像ロードに困る(AsyncImageが使えない)
  • present/dismissの使用に癖がある
  • UIにフォーカスを当てられない(よくあるTextFiledに最初からフォーカス合わせるとか)
  • Navigation周りにバグが多い。
  • Pull to Refreshがない

UIkitとSwiftUIのチートシート

https://qiita.com/hcrane/items/eb847ca7fb7a0b9e8073
https://fuckingswiftui.com/

RxSwiftとCombineのチートシート

RxSwift経験している人向けにCombineだとどれだっけの対応表
https://github.com/CombineCommunity/rxswift-to-combine-cheatsheet

14
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
9