100 Days of SwiftUI【Day 71〜Day 75】
こんにちは、白くまコージです!
iOSアプリを開発できるようになるため、Swiftを勉強中です。
100 Days of SwiftUIのDay 71〜Day 75が完了したので、ここに記録を残します。
学習記録
Day 71 – Project 14, part 4
学習時間
30分
学んだこと
- WikipediaのAPIから近くのランドスポットを取得する方法
- Text()のViewを連結する方法
- Text(“Some text”) + Text(” and another text”)
- コードをすっきりさせるためのテクニック
感想
Project 14の実装パートです。
新しい技術はほぼなく、既に学んだ技術を使った実装パートだったので学習時間も比較的短く済みました。
ただ、実装をする上で重要なテクニックの紹介があったので、それはとても良いと思いました。
まず、配列をソートするためのsortedを使う場合に、対象のstructがComparableに準拠した方が使う側のコードすっきりするという点です。
Comparableに準拠せずにソートしようとした場合、使う側にてソートのロジックをクロージャとして実装する必要があります。
values.sorted { $0.title < $1.title }
一方でComparableに準拠した場合、使う側はsorted()を使用するだけで済みます。
values.sorted()
また、ネストが深い要素を取り出す場合も、使う側で実装するのではなく、structのコンピューテッドプロパティとして実装するとコードがすっきりします。
今回の例だと、Stringの配列を値としてもつ辞書からの要素の取り出しが、それにあたります。
let terms: [String: [String]]?
// コンピューテッドプロパティにすることで
// 使う側ではvalue.descriptionだけで取り出せる
var description: String {
terms?["description"]?.first ?? "No further information."
}
sorted()の例も、コンピューテッドプロパティの例も、いずれも使う側のコードをすっきりさせるためのテクニックです。
データを保持するstruct側にロジックを寄せることで、可読性の高いコードが実装できることを学びました。
Day 72 – Project 14, part 5
学習時間
60分
学んだこと
- MVVMデザインパターンに沿った実装
- Document Directoryに対するデータの読み書き
- Touch IDとFace IDによる認証方法
感想
Project 14の実装パートです。ここで実装は一通り完成です。
MVVM(Model-View-ViewModel)については聞いたことはあり、なんとなく知っていたデザインパターンでしたが、Viewに対するextensionとして定義する手法は初めて知りました。
確かに、この手法であればViewの数が増えた場合でも、一律ViewModelという名前で定義できるからクラスの命名に苦労することもなくなり、Viewとの対応関係も非常にすっきりするので良いと思いました。
どのコードをViewModelに移して、どこをViewに残すかの判断は難しそうだなと感じました。
また、今回のプロジェクトではViewとViewModelのみが登場したので、Modelをどのように実装するかも気になるところです。今後のプロジェクトに期待したいと思います。
Day 73 – Project 14, part 6
学習時間
60分
学んだこと
チャレンジパートのため、以下の課題に挑戦しました。
- Mapをhybridとstandardで切り替えられるようにする
- 生体認証でエラーだった場合にアラートを表示する
- EditViewをViewとViewModelに分割する
感想
Project 14のチャレンジパートです。
生体認証(Touch IDとFace ID)のエラー時のアラートに関しては、課題内容と異なり何も実装しなくてもデフォルトで表示されたので、この課題はスキップしました。iOSかSwiftUIのバージョンアップによって変わったのかもしれません。
それ以外の課題は無事実装できました。
Mapを切り替えるためのボタンは、デザインセンスの問われる部分なのでそこが難しいと感じました。実装自体はMapをVStackで囲んで、下にButtonを配置するだけですんなりできましたが…
ViewModelへの分割も正解がないため、どこまでをViewModelに寄せるかが判断に迷うところでした。
Day 74 – Project 15, part 1
学習時間
40分
学んだこと
- アクセシビリティを考慮した実装方法
- ラベルの付け方
- VoiceOverに無視させる設定
- Viewをグループ化する方法
- 値の読み上げ方法
- カスタムスワイプアクションの設定方法
感想
Project 15の解説パートです。
今回はiOSのアクセシビリティに関する機能の解説です。
僕はこれまでアクセシビリティの機能を使ったことがなかったので「そもそもアクセシビリティって何?」から始まりました。
そのため、実装する上でどのようなことを考慮しなければいけないかがあまりよくわかっていないので難しいなと感じました。
また、通常の実装でもVoiceOverによる読み上げは実施されるはずのため、どこがアクセシビリティを意識した追加実装が必要かも見極めていく必要があると感じました。
しかし、より多くの人にアプリを使ってもらうためにも必要な機能であるため、ここはもっと勉強が必要だと思いました。
Day 75 – Project 15, part 2
学習時間
40分
学んだこと
- 音声入力に対応する実装
- アクセシビリティに対応する実装
感想
Project 15の実装パートです。
今回はこれまでとは異なり、新しいプロジェクトを作るのではなく、過去のプロジェクトにアクセシビリティのコードを追加する形でした。
過去のプロジェクトを一覧で見ると、それなりにたくさん実装してきたのだなと感じることができました。
実装内容自体は解説パートで習ったことをプロジェクトに当てはめるだけだったので、特に新しい内容はありませんでした。
ただ、プロジェクトに当てはめる際に、どこにアクセシビリティのコードを追加すべきかを考えることが一番のポイントであり、難しいところだと感じました。
iPhoneの実機で色々と試してみないとわからないことが多い部分だと思いました。
まとめ
100 Days of SwiftUIのDay 71〜Day 75が完了しました。
今回は実装する上で、コードをすっきりするためのテクニックが多く出てきました。このような可読性の高いコードは好きなので、もっと色々と知りたいなと思いました。
今回で全体の4分の3が完了しました。100日目までもう少しのところまできたので引き続き頑張っていきたいです。
以上、白くまコージでした!