Mercurial > public > simoleon
annotate Simoleon/Functions/Read.swift @ 150:6eac99e99b96
Add error handling to read json function
author | Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com> |
---|---|
date | Thu, 19 Aug 2021 19:12:56 +0100 |
parents | Simoleon/Functions/ParseJson.swift@75c1a05176f6 |
children |
rev | line source |
---|---|
0
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
1 // |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
2 // ParseJson.swift |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
3 // Simoleon |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
4 // |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
5 // Created by Dennis Concepción Martín on 11/07/2021. |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
6 // |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
7 |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
8 import Foundation |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
9 |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
10 |
47
75c1a05176f6
Refactor code
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
11 // Read JSON File |
150
6eac99e99b96
Add error handling to read json function
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
12 func read<T: Decodable>(json filename: String) throws -> T { |
0
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
13 let data: Data |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
14 |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
15 guard let file = Bundle.main.url(forResource: filename, withExtension: nil) |
47
75c1a05176f6
Refactor code
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
16 else { |
150
6eac99e99b96
Add error handling to read json function
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
17 throw JsonErrors.fileMissing |
0
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
18 } |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
19 |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
20 do { |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
21 data = try Data(contentsOf: file) |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
22 } catch { |
150
6eac99e99b96
Add error handling to read json function
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
23 throw JsonErrors.loadFailed(cause: error.localizedDescription) |
0
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
24 } |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
25 |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
26 do { |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
27 let decoder = JSONDecoder() |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
28 return try decoder.decode(T.self, from: data) |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
29 } catch { |
150
6eac99e99b96
Add error handling to read json function
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
30 throw JsonErrors.parseFailed(cause: error.localizedDescription) |
0
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
31 } |
e0c2bda6c51f
first commit
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
32 } |