annotate GeoQuiz/Logic/Load.swift @ 0:413e2d21333e

first commit
author Dennis C. M. <dennis@denniscm.com>
date Tue, 20 Sep 2022 08:13:26 +0200
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
1 //
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
2 // Load.swift
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
3 // GeoQuiz
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
4 //
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 7/9/22.
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
6 //
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
7
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
8 import Foundation
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
9
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
10 func load<T: Decodable>(_ filename: String) -> T {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
11 let data: Data
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
12
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
13 guard let file = Bundle.main.url(forResource: filename, withExtension: nil)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
14 else {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
15 fatalError("Couldn't find \(filename) in main bundle.")
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
16 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
17
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
18 do {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
19 data = try Data(contentsOf: file)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
20 } catch {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
21 fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
22 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
23
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
24 do {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
25 let decoder = JSONDecoder()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
26 return try decoder.decode(T.self, from: data)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
27 } catch {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
28 fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
29 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
30 }