annotate LazyBear/Helpers/MapSection.swift @ 465:6953d83060a4

New design
author Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
date Sat, 17 Jul 2021 17:58:57 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
465
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
1 //
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
2 // MapSection.swift
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
3 // lazybear
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
4 //
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 17/07/2021.
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
6 //
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
7
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
8 import SwiftUI
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
9 import MapKit
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
10
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
11 struct MapSection: View {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
12 var state: String
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
13
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
14 var body: some View {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
15 let states: [UsStatesModel] = parseJson("UsStatesCoordinates.json")
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
16 let stateObject = states.first(where: { $0.state == state })
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
17 let region = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: stateObject?.latitude ?? 40.741895, longitude: stateObject?.longitude ?? -73.989308), span: MKCoordinateSpan(latitudeDelta: 3.5, longitudeDelta: 3.5))
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
18
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
19 Map(coordinateRegion: .constant(region))
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
20 .frame(height: 350)
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
21 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
22
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
23 // MARK: - PARSE JSON
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
24 private func parseJson<T: Decodable>(_ filename: String) -> T {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
25 let data: Data
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
26
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
27 guard let file = Bundle.main.url(forResource: filename, withExtension: nil)
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
28 else {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
29 fatalError("Couldn't find \(filename) in main bundle.")
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
30 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
31
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
32 do {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
33 data = try Data(contentsOf: file)
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
34 } catch {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
35 fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
36 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
37
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
38 do {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
39 let decoder = JSONDecoder()
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
40 return try decoder.decode(T.self, from: data)
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
41 } catch {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
42 fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
43 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
44 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
45 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
46
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
47 struct MapSection_Previews: PreviewProvider {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
48 static var previews: some View {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
49 MapSection(state: "California")
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
50 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
51 }