100 Days of SwiftUI【Day 76〜Day 80】
こんにちは、白くまコージです!
iOSアプリを開発できるようになるため、Swiftを勉強中です。
100 Days of SwiftUIのDay 76〜Day 80が完了したので、ここに記録を残します。
学習記録
Day 76 – Project 15, part 3
学習時間
20分
学んだこと
チャレンジパートのため、以下の課題に挑戦しました。
- 過去のプロジェクトに対してアクセシビリティの実装を追加
感想
Project 15のチャレンジパートです。
僕はまだ実機に繋げての検証をしていないので、今回の課題の最初の2つは実装だけしてみて、最後の1つはスキップしました。
やはりアクセシビリティの実装には、実機に繋げてVoiceOverを聞いた上でおかしなところを直していくというやり方がベストだと思いました。
机上で実装だけしてもあまり意味はないなと感じています。
Day 77 – Milestone: Projects 13-15
学習時間
180分
学んだこと
- これまでの復習
- 演算子オーバーロード
- プロパティラッパーの自作方法
感想
Projects 13-15のマイルストーンパートです。
これまでの復習と2つのトピックを学びましたが、メインはチャレンジパートです。
チャレンジパートでは課題で示されたアプリを完全に1から作成しました。
時間はそれなりにかかりましたが、これまで学習してきたことを使えば実装できる内容ではありました。
少し手こずったのは次の2点です。
- PhotosPickerでライブラリから写真を選択した後に、名前の入力を強制する方法
- データの保存処理
名前の入力に関しては、sheetを使うことで実現できました。写真選択後にsheet表示のフラグをオンにして、表示されたsheet上で名前を入力するテキストフィールドを表示する形です。
データの保存処理に関しては、写真と名前を保持するstructについて、最初は写真をImage型で定義してしまっていたのでCodableプロトコルに準拠できずに実現できませんでした。
注意書きにも書いてあったように写真をData型にしてCodableプロトコルに準拠できるようにした上で、UIで表示する際はData→UIImage→Imageという流れで変換することで実現できました。
アプリの構造としては、ContentViewに関してはViewModelを定義して、データの保存や復元処理をViewModel側に実装する形にできました。ここは特にやらなくてもいい点でしたが、よりキレイなコードにできたので良かったと思います。
課題に取り組んでいるときは、なんとなく実装できそうな見込みがある中で進めることができたのでかなり楽しかったです。やはり、できると楽しい、できないと面白くないですね。
Day 78 – Time for MapKit
学習時間
60分
学んだこと
- 前日に作成したアプリに位置情報を表すMapを追加する課題に挑戦
感想
引き続き課題に挑戦する日です。
前日作成したアプリに対して、位置情報を表すMapを追加する課題です。
位置情報を取得するという新しい要素については、サンプルコードが提示されていたので、基本的にはこれまで学習してきた内容で実現できる課題です。
最初に提示された仕様を見た時は「ホントに実現できるのかな」と少しビビってしまいましたが、やってみるとそこまで難しくはありませんでした。
なので、特に問題なく提示された仕様を実現するコードが実装できました。
やはりできると楽しいですね。
Day 79 – Project 16, part 1
学習時間
30分
学んだこと
- Listの項目を選択する方法
- タブを配置してViewを切り替える方法
感想
Project 16の解説パートです。このプロジェクトは全部で7日間と、これまでで一番長いものなので、最終的に作るアプリはなかなかのものになるだろうと予想しています。
Listの解説の中で紹介していた「2本指で左から右にスワイプすると複数選択モードになる」というのは初めて知りました。実際に自分のiPhoneのメモアプリで試してみたら確かに複数選択モードになりました。それなりに長くiPhoneを使ってますが、意外と知らないジェスチャは多いですね。。
タブを識別する方法としてtagを紹介していましたが、識別に使う変数はStringじゃなくてenumがいいと思いました。実際、Xcodeで試したところenumでもうまくいきました。
前から思っていますが、もう少しenumを使えばいいのに、と思う場面は多くあります。enumならStringと違い打ち間違えをすることもなくなるので、コードも安全になる利点があるはずです。
Day 80 – Project 16, part 2
学習時間
35分
学んだこと
- Result型の使い方
- Image interpolation
- コンテキストメニューの作り方
感想
Project 16の解説パートです。
Result型については使い所が難しいなと感じました。Result型を使う前のdo-catchを使ったコードでもやりたいことは実現できているはずなので、あえてResult型を使う場面がイメージできませんでした。
コンテキストメニューは補助的な機能なので、最初は考えなくてもいいものだと思いました。どうしてもコンテキストメニューが必要な場面になったら初めて考慮に入れるくらいの感覚かなと思います。
まとめ
100 Days of SwiftUIのDay 76〜Day 80が完了しました。
このコースも8割のところまできました。
正直にいうと最初はやり切れるか少し不安でしたが、ここまできたら後は最後まで突っ走るのみです。
もちろん、やり切ることだけが目的ではないので、学習内容がしっかりと身につくように集中して取り組んでいきたいです。
Day 77とDay 78の課題では、それなりにきちんとしたアプリが実装できたので、力がついてきたことを実感できています。
もっともっといろいろなことができるように頑張っていきたいです。
以上、白くまコージでした!