100 Days of SwiftUI【Day 91〜Day 95】
こんにちは、白くまコージです!
iOSアプリを開発できるようになるため、Swiftを勉強中です。
100 Days of SwiftUIのDay 91〜Day 95が完了したので、ここに記録を残します。
学習記録
Day 91 – Project 17, part 6
学習時間
80分
学んだこと
チャレンジパートのため、以下の課題に挑戦しました。
- 新しいカード追加時にテキストフィールド欄を空にする
- カードを右に途中までドラッグして戻すときにカードの色が一瞬赤色になる現象の修正
- ユーザーが答えを間違えたときにカードを再び山に戻す実装
感想
Project 17のチャレンジパートです。
1つ目は特に難しくないので問題なくできました。
2つ目は、三項演算子を2つ使うやり方以外思いつかなかったので、とりあえずそれで完了にしました。もっときれいにやる方法があるとのことでしたが、ここは諦めてしまいした。
3つ目は未完成のまま終わってしまいました。アクセシビリティに対応した方のボタンだとうまく行ったのですが、なぜか普通のForEachの中の処理がうまくいきませんでした。配列に想定通りのデータが入っていることはデバッグで確認できたのですが、うまく描画がされませんでした。それなりに時間も使ってしまったので一旦ここは諦めて終了です。
Day 92 – Project 18, part 1
学習時間
60分
学んだこと
- SwiftUIのレイアウトの仕組み
- alignmentGuideの使い方
- alignmentの拡張方法
- 絶対位置の指定方法
感想
Project 18の解説パートです。
最初の動画は珍しくほぼコードの説明がなく、ずっと口頭での解説でした。レイアウトの仕組みについてViewの親子関係やmodifierの関連の説明でしたが比較的わかりやすかったと思います。
alignmentGuideは難しくて正確に理解できた自信がありません。揃える位置を新しく定義するくらいの感覚です。ここはもっと勉強が必要なところだと感じました。
alignmentの拡張方法についてもVerticalAlignmentのextensionとAlignmentIDが唐突に登場して理解が追いついていません。揃える位置を自分で調整したい場合に使うものと一旦は理解しました。
Day 93 – Project 18, part 2
学習時間
60分
学んだこと
- GeometryReaderの使い方
- ScrollViewを使った時の視覚効果の付け方
感想
Project 18の解説パートです(このプロジェクトは次回で完了なのでアプリの実装はないみたいです)。
GeometryReaderの解説でしたが、難しくて全然理解できませんでした。一つ一つのコードの意味を理解することができなかったし、そもそもなぜGeometryReaderを使うのかも理解できませんでした。
ここで止まってしまうのもよくないので、とりあえずは理解できなったということで先に進もうと思います。しばらく経ってから再度復習しようと思いました。
Day 94 – Project 18, part 3
学習時間
20分
学んだこと
チャレンジパートのため、以下の課題に挑戦しました。
- 画面上部のViewがフェードアウトするように実装
- 垂直位置によりViewの大きさを変えるように実装
- スクロールしたらViewの色が変わるように実装
感想
Project 18のチャレンジパートです。
前日のGeometryReaderが全く理解できなかったので、今回のチャレンジは無理だろうと思って挑みましたが、思いのほか簡単に実装できてしまいました。
Viewの位置によってproxy.frame(in: .global).minYがどのような値を取っているかが分かれば実装はできてしまいました。
今回は簡単でしたが、課題が難しすぎても困ってしまうので課題の難易度調整は難しいのだろうなと感じてしまいました。
Day 95 – Milestone: Projects 16-18
学習時間
90分
学んだこと
- これまでの復習
- 関数型プログラミングの利点
- Result型
感想
Projects 16-18のマイルストーンパートです。
これまでの復習と2つのトピックを学びましたが、メインはチャレンジパートです。
チャレンジパートでは課題で示されたサイコロアプリを1から作成しました。
今回のアプリはそこまで難しいものではなかったため、実装自体は割とすぐに終わりました(デザインは簡素なものになってしまいましたが)。
一番難しいとされていたサイコロを振る時に目が出る前にサイコロの数字をランダムに表示するところ(テレビゲームでよくみるサイコロを振る前の演出)は、指示通りにTimerを使うことでとりあえず実装はできました。ただ、これが最適かと言われるとかなり微妙なものが出来上がってしまいました。サイコロを振っていない時も常にTimerが動くように作ってしまったので、本当に必要な時だけTimerが動作するようにできればなお良かったと思います。
まとめ
100 Days of SwiftUIのDay 91〜Day 95が完了しました。
難しくて理解できない部分も多いですが、なんとか続けています。この学習コースも残りわずかとなりましたが、最後まで気を抜かずにやり遂げたいと思います。
以上、白くまコージでした!