diff GeoQuiz/Logic/GameProtocol+Extension.swift @ 15:f1967f8cc67b

first iteration of core data
author Dennis C. M. <dennis@denniscm.com>
date Wed, 19 Oct 2022 10:04:17 +0200
parents 136928bae534
children f140bb277c96
line wrap: on
line diff
--- a/GeoQuiz/Logic/GameProtocol+Extension.swift	Wed Oct 19 07:56:33 2022 +0200
+++ b/GeoQuiz/Logic/GameProtocol+Extension.swift	Wed Oct 19 10:04:17 2022 +0200
@@ -8,6 +8,7 @@
 import Foundation
 import SwiftUI
 import AVFAudio
+import CoreData
 
 protocol Game: ObservableObject {
     
@@ -29,7 +30,6 @@
     // Alerts
     var alertTitle: String { get set }
     var alertMessage: String { get set }
-    var showingGameOverAlert: Bool { get set }
     var showingEndGameAlert: Bool { get set }
     var showingWrongAnswerAlert: Bool { get set }
     var showingExitGameAlert: Bool { get set }
@@ -91,7 +91,7 @@
             if userLives == 0 {
                 alertTitle = "🤕 Game over 🤕"
                 alertMessage = "Get up and try again."
-                showingGameOverAlert = true
+                showingEndGameAlert = true
             } else {
                 alertTitle = "🔴 Wrong 🔴"
                 alertMessage = "You have \(userLives) lives left."
@@ -107,14 +107,20 @@
         }
     }
     
-    func reset(selector: () -> Void) {
-        dataAsked = [String: T]()
-        userScore = 0
-        userLives = 3
-        correctAnswers = [String: T]()
-        wrongAnswers = [String: T]()
-        askQuestion {
-            selector()
+    func save(_ gameType: GameType, with moc: NSManagedObjectContext) {
+        let playedGame = PlayedGame(context: moc)
+
+        playedGame.id = UUID()
+        playedGame.type = gameType
+        playedGame.date = Date()
+        playedGame.score = Int32(userScore)
+        playedGame.correctAnswers = Array(correctAnswers.keys)
+        playedGame.wrongAnswers = Array(wrongAnswers.keys)
+        
+        do {
+            try moc.save()
+        } catch {
+            print("Couldn't save object to CoreData: \(error)")
         }
     }