Mercurial > public > geoquiz
diff GeoQuiz/Helpers/Extensions.swift @ 26:425078c01194
refactor code
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Wed, 09 Nov 2022 10:30:01 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/GeoQuiz/Helpers/Extensions.swift Wed Nov 09 10:30:01 2022 +0100 @@ -0,0 +1,95 @@ +// +// Extensions.swift +// GeoQuiz +// +// Created by Dennis Concepción Martín on 7/11/22. +// + +import Foundation +import SwiftUI + +extension ShapeStyle where Self == Gradient { + static var main: Gradient { + Gradient(colors: [Color("MayaBlue"), Color("RoyalLightBlue")]) + } + + static var secondary: Gradient { + Gradient(colors: [Color("AtomicTangerine"), Color("ChinaPink")]) + } + + static var tertiary: Gradient { + Gradient(colors: [Color("PinkLavender"), Color("BlueBell")]) + } + + static var quaternary: Gradient { + Gradient(colors: [Color("MaizeCrayola"), Color("MiddleRed")]) + } +} + +extension ShapeStyle where Self == Color { + static var atomicTangerine: Color { + Color("AtomicTangerine") + } + + static var blueBell: Color { + Color("BlueBell") + } + + static var chinaPink: Color { + Color("ChinaPink") + } + + static var maizeCrayola: Color { + Color("MaizeCrayola") + } + + static var mayaBlue: Color { + Color("MayaBlue") + } + + static var middleRed: Color { + Color("MiddleRed") + } + + static var pinkLavender: Color { + Color("PinkLavender") + } + + static var royalLightBlue: Color { + Color("RoyalLightBlue") + } +} + +extension Formatter { + static let withSeparator: NumberFormatter = { + let formatter = NumberFormatter() + formatter.numberStyle = .decimal + return formatter + }() +} + +extension Int { + var formattedWithSeparator: String { + return Formatter.withSeparator.string(for: self) ?? "" + } +} + +extension Bundle { + func decode<T: Codable>(_ file: String) -> T { + guard let url = self.url(forResource: file, withExtension: nil) else { + fatalError("Failed to locate \(file) in bundle.") + } + + guard let data = try? Data(contentsOf: url) else { + fatalError("Failed to load \(file) from bundle.") + } + + let decoder = JSONDecoder() + + guard let loaded = try? decoder.decode(T.self, from: data) else { + fatalError("Failed to decode \(file) from bundle.") + } + + return loaded + } +}