annotate GeoQuiz/Helpers/Extensions.swift @ 30:eb23effeede7

add DatasetView
author Dennis C. M. <dennis@denniscm.com>
date Thu, 10 Nov 2022 11:51:52 +0100
parents 425078c01194
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
1 //
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
2 // Extensions.swift
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
3 // GeoQuiz
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
4 //
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 7/11/22.
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
6 //
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
7
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
8 import Foundation
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
9 import SwiftUI
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
10
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
11 extension ShapeStyle where Self == Gradient {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
12 static var main: Gradient {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
13 Gradient(colors: [Color("MayaBlue"), Color("RoyalLightBlue")])
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
14 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
15
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
16 static var secondary: Gradient {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
17 Gradient(colors: [Color("AtomicTangerine"), Color("ChinaPink")])
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
18 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
19
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
20 static var tertiary: Gradient {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
21 Gradient(colors: [Color("PinkLavender"), Color("BlueBell")])
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
22 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
23
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
24 static var quaternary: Gradient {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
25 Gradient(colors: [Color("MaizeCrayola"), Color("MiddleRed")])
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
26 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
27 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
28
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
29 extension ShapeStyle where Self == Color {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
30 static var atomicTangerine: Color {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
31 Color("AtomicTangerine")
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
32 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
33
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
34 static var blueBell: Color {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
35 Color("BlueBell")
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
36 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
37
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
38 static var chinaPink: Color {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
39 Color("ChinaPink")
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
40 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
41
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
42 static var maizeCrayola: Color {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
43 Color("MaizeCrayola")
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
44 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
45
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
46 static var mayaBlue: Color {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
47 Color("MayaBlue")
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
48 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
49
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
50 static var middleRed: Color {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
51 Color("MiddleRed")
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
52 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
53
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
54 static var pinkLavender: Color {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
55 Color("PinkLavender")
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
56 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
57
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
58 static var royalLightBlue: Color {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
59 Color("RoyalLightBlue")
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
60 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
61 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
62
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
63 extension Formatter {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
64 static let withSeparator: NumberFormatter = {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
65 let formatter = NumberFormatter()
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
66 formatter.numberStyle = .decimal
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
67 return formatter
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
68 }()
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
69 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
70
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
71 extension Int {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
72 var formattedWithSeparator: String {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
73 return Formatter.withSeparator.string(for: self) ?? ""
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
74 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
75 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
76
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
77 extension Bundle {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
78 func decode<T: Codable>(_ file: String) -> T {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
79 guard let url = self.url(forResource: file, withExtension: nil) else {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
80 fatalError("Failed to locate \(file) in bundle.")
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
81 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
82
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
83 guard let data = try? Data(contentsOf: url) else {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
84 fatalError("Failed to load \(file) from bundle.")
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
85 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
86
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
87 let decoder = JSONDecoder()
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
88
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
89 guard let loaded = try? decoder.decode(T.self, from: data) else {
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
90 fatalError("Failed to decode \(file) from bundle.")
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
91 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
92
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
93 return loaded
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
94 }
425078c01194 refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
95 }