tas5521 / MedicineNameQuiz

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

学習中画面と学習結果画面に情報を追加 #111 #117

Closed tas5521 closed 4 months ago

tas5521 commented 5 months ago

関連Isuue番号

close #111

追加・変更の概要

学習中画面と学習結果画面に情報を追加します。

変更の目的

タスクの進捗状況

変更内容

  1. 学習中画面の暗記カードの上部に、現在の暗記カードの面に表示されている薬名が商品名なのか一般名なのかを表示しました。

    PR117_1 PR117_2
  2. 結果画面に、どの問題リストからの出題なのかと、出題設定を表示しました。

    PR117_3
  3. 出題設定により、学習結果画面のリストに表示する商品名と一般名の順番が切り替わるようにしました。  商品名→一般名の出題の場合   一般名→商品名の出題の場合  PR117_3 PR117_4

さらに、学習中画面(StudyView)と結果画面(ResultView)は、タブバーを消しました。

影響範囲

その他のファイルにも差分が生じていますが、ランキングと広告表示に関するファイルを削除したためです。

操作方法

  1. 任意の問題リストを作成した状態で、学習画面のスタートボタンを押してください。

  2. 表示された学習中画面の暗記カードに、商品名→一般名の出題の場合は、オモテ面に「商品名」、ウラ面に「一般名」と記載されていることを確認してください。

  3. さらに、一般名→商品名の出題の場合は、オモテ面に「一般名」、ウラ面に「商品名」と記載されていることを確認してください。 PR117_5

  4. 学習結果画面に移動し、どの問題リストからの出題なのかと、出題設定が表示されていることを確認してください。

  5. 学習結果画面のリストに表示する商品名と一般名の順番が、商品名→一般名の出題の場合は、上に黒文字で商品名が、下に赤文字で一般名が記載されていることを確認してください。 PR117_6

  6. 学習結果画面のリストに表示する商品名と一般名の順番が、一般名→商品名の出題の場合は、上に黒文字で一般名が、下に赤文字で商品名が記載されていることを確認してください。 PR117_7

テストしたこと

上記を確認しました。

相談事項

特になし。

YoshinoriKobayashi commented 4 months ago

@tas5521 今回の修正ではないですが、ResultViewのcountResultを次のように修正したほうがいいと思いました。

変更前

// 解答結果のカウント
private func countResult(of result: StudyResult) -> some View {
  HStack {
      // まるかばつのImageを配置
      Image(systemName: result.rawValue)
          // 正解なら緑、不正解なら赤にする
          .foregroundStyle(result == .correct ? Color.buttonGreen : Color.buttonRed)
      // 正解または不正解の数をカウント
      var resultCount: Int {
          switch studyMode {
          case .brandToGeneric:
              return questions.filter { $0.brandToGenericResult == result }.count
          case .genericToBrand:
              return questions.filter { $0.genericToBrandResult == result }.count
          } // switch ここまで
      } // resultCount ここまで
      // 正解または不正解の数を表示
      Text(":  \(resultCount)")
  } // HStack ここまで
} // countResult ここまで

変更後

// 解答結果のカウント
private func countResult(of result: StudyResult) -> some View {
    // 正解または不正解の数をカウント
    let resultCount = questions.filter {
        switch studyMode {
        case .brandToGeneric:
            return $0.brandToGenericResult == result
        case .genericToBrand:
            return $0.genericToBrandResult == result
        } // switch ここまで
    }.count // resultCount ここまで

    return HStack {
        // まるかばつのImageを配置
        Image(systemName: result.rawValue)
            // 正解なら緑、不正解なら赤にする
            .foregroundStyle(result == .correct ? Color.buttonGreen : Color.buttonRed)
        // 正解または不正解の数を表示
        Text(":  \(resultCount)")
    } // HStack ここまで
} // countResult ここまで

変更点は次のとおりです。

tas5521 commented 4 months ago

@tas5521 今回の修正ではないですが、ResultViewのcountResultを次のように修正したほうがいいと思いました。

変更前

// 解答結果のカウント
private func countResult(of result: StudyResult) -> some View {
  HStack {
      // まるかばつのImageを配置
      Image(systemName: result.rawValue)
          // 正解なら緑、不正解なら赤にする
          .foregroundStyle(result == .correct ? Color.buttonGreen : Color.buttonRed)
      // 正解または不正解の数をカウント
      var resultCount: Int {
          switch studyMode {
          case .brandToGeneric:
              return questions.filter { $0.brandToGenericResult == result }.count
          case .genericToBrand:
              return questions.filter { $0.genericToBrandResult == result }.count
          } // switch ここまで
      } // resultCount ここまで
      // 正解または不正解の数を表示
      Text(":  \(resultCount)")
  } // HStack ここまで
} // countResult ここまで

変更後

// 解答結果のカウント
private func countResult(of result: StudyResult) -> some View {
    // 正解または不正解の数をカウント
    let resultCount = questions.filter {
        switch studyMode {
        case .brandToGeneric:
            return $0.brandToGenericResult == result
        case .genericToBrand:
            return $0.genericToBrandResult == result
        } // switch ここまで
    }.count // resultCount ここまで

    return HStack {
        // まるかばつのImageを配置
        Image(systemName: result.rawValue)
            // 正解なら緑、不正解なら赤にする
            .foregroundStyle(result == .correct ? Color.buttonGreen : Color.buttonRed)
        // 正解または不正解の数を表示
        Text(":  \(resultCount)")
    } // HStack ここまで
} // countResult ここまで

変更点は次のとおりです。

  • filterの使い方を簡素にした
  • View定義と計算部分を分離した

コメントをありがとうございました! View定義と計算部分は分離した方がコードを解釈しやすいですね。 また、filter部分もfilterの宣言が1回に収まって、無駄がなくなったように思います。 下記のように修正しました。 https://github.com/CodeCandySchool/MedicineNameQuiz_Sagae/blob/6c228d74d64410aa3febcaac71ca91bf688e6de6/MedicineNameQuiz_Sagae/View/Study/ResultView.swift#L98-L118

YoshinoriKobayashi commented 4 months ago

@tas5521 確認しました!マージしましょう!