annotate GeoQuiz/Logic/FileController.swift @ 20:e281791e0494

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