tas5521 / MedicineNameQuiz

薬の名前のクイズアプリ
1 stars 0 forks source link

問題リスト選択Pickerの要素の識別にUUIDを使用 #94 #99

Closed tas5521 closed 6 months ago

tas5521 commented 7 months ago

関連Issue番号

close #94

追加・変更の概要

問題リスト選択Pickerの要素の識別にUUIDを使用するよう変更します。

変更の目的

Issue 92(前回選択した時の値からスタートする)で、前回選択した時の値を保持するため、PickerにはUUIDを持たせます。

タスクの進捗状況

変更内容

  1. DefaultUUID構造体を作成しました。この構造体で、ランダム20のUUIDを管理します。
  2. QuestionListPickerItem構造体を作成しました。この構造体で、Pickerに表示するItemを管理します。
  3. ModeSelectionViewに、計算型プロパティquestionListPikerItemsを作成しました。このプロパティでは、Pickerに表示するItemを作成します。(ユーザーが作成した問題リストを上に、ランダム20は一番最後に表示することとしました。)
  4. ModeSelectionViewの問題リスト選択用Pickerでは、selectionとして、viewModel.questionListIDを使用します。
  5. .onAppearに、もし、現在指定されたIDの問題が問題リスト(fetchedLists)になかったら、問題IDをランダム20のものにする処理を追加しました。
  6. CoreDataのQuestionListに、UUID型の変数idを持たせました。
  7. ResultViewとCreateQuestionListViewModelの問題リスト保存処理に、idを保存する処理を追加しました。
  8. ModeSelectionViewModelに、questionListIDを持たせました。(初期値は、ランダム20のUUID)
  9. ランダム20問を作成する処理をcreateQuestionsメソッドから分離し、createRandom20という名前のメソッドにしました。
  10. createQuestionsメソッドの内部では、問題リストを識別するIDがランダム20のものであるかを判定し、もしランダム20のIDであれば、createRandom20を呼び出し、ランダム20問を作成します。
  11. もし、セットされているquestionListIDが、ユーザーが独自に作成した問題リストのもの(問題を識別するIDがランダム20のものではない)の場合、CoreData(QuestionList)から、該当するIDを持つ問題を取得し、出題します。

影響範囲

操作方法

<ランダム20問からの出題> スタートボタンを押して、これまで通り、ランダム20問が出題されることを確認してください。 PR99_1

<独自の問題リストからの出題>

  1. 問題リスト作成画面に移動して、独自の問題リストを作成してください。
  2. 学習画面に戻り、問題リストPickerの、ランダム20問の上に独自の問題リストが表示されていることを確認してください。
  3. 独自の問題リストを選択し、スタートボタンを押してください。
  4. 独自の問題が出題されることを確認してください。 PR99_2

<問題リストが削除された時の対応>

  1. 学習画面のPickerに、独自の問題リストをセットしてください。
  2. 問題リスト画面で、1でセットした問題リストを削除してください。
  3. 学習画面に戻り、Pickerがランダム20問にセットされていることを確認してください。 PR99_3

テストしたこと

上記を確認しました。

相談事項

ランダム20問のUUIDはアプリ内の複数の箇所で使用されるため、DefaultUUIDという構造体に持たせて、静的変数にして使用しています。この使い方でよろしいでしょうか?