100 Days of SwiftUI【Day 66〜Day 70】
こんにちは、白くまコージです!
iOSアプリを開発できるようになるため、Swiftを勉強中です。
100 Days of SwiftUIのDay 66〜Day 70が完了したので、ここに記録を残します。
学習記録
Day 66 – Project 13, part 5
学習時間
40分
学んだこと
- Core Imageのフィルタを切り替える方法
- ShareLinkを使って画像を共有する方法
- App Storeのレビューをリクエストする方法
感想
Project 13の実装パートです。
Core Imageのフィルタを設定するためのkCIFilterxxxKeyは堅牢なSwiftにしては珍しく型安全ではないコードだなと感じました。昔からあるフレームワークだからでしょうか?
App Storeのレビューをリクエストするタイミングは考慮が必要だなと思いました。条件を満たして以降毎回表示するのもよくないので、ここはロジックを工夫する必要がありそうです。
Day 67 – Project 13, part 6
学習時間
50分
学んだこと
チャレンジパートのため、以下の課題に挑戦しました。
- 画像が選択されていない状態ではスライダーとボタンを非表示となるよう修正
- スライダーを追加して入力項目を増やす
- Core Imageのフィルターを3つ追加する
感想
Project 13のチャレンジパートです。
今回の課題は特に難しくなかったので、問題なく実装できました。
Day 68 – Project 14, part 1
学習時間
40分
学んだこと
- Comparableへの準拠方法
- Comparableに準拠したstructを使ったsorted()
- Documents Directoryに対するデータの読み書き
- enumを使った条件分岐によるViewの切り替え
感想
Project 14の解説パートです。
特に難しい内容はなかったため、すんなりと終了しました。
個人的にはenumを使うとコードがキレイになって好きなため、ようやく登場したかと思いました。(最初のSwiftの解説以来??)
Day 69 – Project 14, part 2
学習時間
40分
学んだこと
- MapKitを使ったMapの実装方法
- Touch IDとFace IDによる認証方法
感想
Project 14の解説パートです。
MapKitに関しては新しく覚えることが非常に多い印象でした。一つひとつ覚えるのは大変なので、実際にMapを使いたいときになったら必要なものを習得していくのが良さそう。
Touch IDとFace IDに関しては、意外と簡単に実装できるのでびっくりしました。シミュレータにおけるFace IDを使った認証の再現方法も簡単だったので、使いやすいなと感じました。
ただ、自分でTouch IDやFace IDが必要になるアプリを作ることはあるのだろうか、とも思いました。自分が使っているアプリだと銀行系などの秘匿情報を扱うアプリじゃない限り、アプリ側での認証が求められることはなかったと記憶しているので。とはいえ、覚えておいて損はないと思いました。
Day 70 – Project 14, part 3
学習時間
70分
学んだこと
- Mapをタップした際の座標を取得する方法
- Mapをタップした箇所にマーカーを設定する方法
- Mapのマーカーを任意のViewにする方法
- デバッグ時のみ実行したいコード
- Equatableの実装方法
- Optional型を使ったsheetの表示
- Viewのinit()にて@Stateプロパティを初期化する方法
- @escapingが付いたクロージャ
感想
Project 14の実装パートです。
onLongPressGestureのコードは実行してもシミュレータで正常に動作しなかったため、こちらのサイトを参考に修正しました。
@Stateプロパティのinit()での初期化と、@escapingがよくわからなかったので追加で調査をしました。
@Stateプロパティのinit()での初期化については、アンダースコアとState(initialValue: Value)を使用しないとエラーになるということだが、なぜか以下のコードでもエラーにはなりませんでした。
name = location.name
description = location.description
iOSやSwiftUIのバージョンアップで変わった可能性がありますが、明確な情報は得られず、ここは謎のままとなってしまいました。
ちなみに元のコードは以下の通りです。
_name = State(initialValue: location.name)
_description = State(initialValue: location.description)
@escapingはクロージャをスコープ外で呼び出す時に必要だと理解しました。
クロージャを受け取ったスコープの外に定義されている変数などに代入する場合が該当すると思います。
まとめ
100 Days of SwiftUIのDay 66〜Day 70が完了しました。
今回で全体の3分の2が完了しました。まだまだSwiftに慣れたとは言えないと思うので、もっともっと勉強して自分でアプリが作れるようになりたいです。
以上、白くまコージでした!