comparison GeoQuiz/Models/GameInfoModel+Protocol.swift @ 26:425078c01194

refactor code
author Dennis C. M. <dennis@denniscm.com>
date Wed, 09 Nov 2022 10:30:01 +0100
parents GeoQuiz/Logic/GameInfoController.swift@f140bb277c96
children
comparison
equal deleted inserted replaced
25:b3df0f5dc750 26:425078c01194
1 //
2 // GameInfoModel+Protocol.swift
3 // GeoQuiz
4 //
5 // Created by Dennis Concepción Martín on 22/10/22.
6 //
7
8 import Foundation
9 import SwiftUI
10
11 protocol GameInfo {
12 var type: GameType { get }
13 var level: String { get }
14 var name: String { get }
15 var isPremium: Bool { get }
16 var symbol: String { get }
17 var gradient: Gradient { get }
18 var numberOfQuestions: Int { get }
19 }
20
21 class GameInfoModel {
22 static func getInfo(for gameType: GameType) -> GameInfo {
23 switch gameType {
24 case .guessTheFlag:
25 return GuessTheFlagInfo()
26 case .guessTheCapital:
27 return GuessTheCapitalInfo()
28 case .guessTheCountry:
29 return GuessTheCountryInfo()
30 case .guessThePopulation:
31 return GuessThePopulationInfo()
32 }
33 }
34
35 private struct GuessTheFlagInfo: GameInfo {
36 let type: GameType = .guessTheFlag
37 let level = "Level 1"
38 let name = "Guess the flag"
39 let isPremium = false
40 let symbol = "flag.fill"
41 let gradient: Gradient = .main
42
43 var numberOfQuestions: Int {
44 let data: CountryModel = Bundle.main.decode("countries.json")
45 return data.countries.count
46 }
47 }
48
49 private struct GuessTheCapitalInfo: GameInfo {
50 let type: GameType = .guessTheFlag
51 let level = "Level 2"
52 let name = "Guess the capital"
53 let isPremium = false
54 let symbol = "building.2.fill"
55 let gradient: Gradient = .secondary
56
57 var numberOfQuestions: Int {
58 let data: CountryModel = Bundle.main.decode("countries.json")
59 return data.countries.count
60 }
61 }
62
63 private struct GuessTheCountryInfo: GameInfo {
64 let type: GameType = .guessTheFlag
65 let level = "Level 3"
66 let name = "Guess the country"
67 let isPremium = false
68 let symbol = "globe.americas.fill"
69 let gradient: Gradient = .tertiary
70
71 var numberOfQuestions: Int {
72 let data: CityModel = Bundle.main.decode("cities.json")
73 return data.cities.count
74 }
75 }
76
77 private struct GuessThePopulationInfo: GameInfo {
78 let type: GameType = .guessTheFlag
79 let level = "Level 4"
80 let name = "Guess the population"
81 let isPremium = false
82 let symbol = "person.fill"
83 let gradient: Gradient = .quaternary
84
85 var numberOfQuestions: Int {
86 let data: CityModel = Bundle.main.decode("cities.json")
87 return data.cities.count
88 }
89 }
90 }