Mercurial > public > lazybear
view LazyBear/Helpers/MapSection.swift @ 471:f6bb6fde1ff7 default tip
Move to mercurial
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Tue, 03 Jun 2025 15:05:50 +0100 |
parents | 6953d83060a4 |
children |
line wrap: on
line source
// // MapSection.swift // lazybear // // Created by Dennis Concepción Martín on 17/07/2021. // import SwiftUI import MapKit struct MapSection: View { var state: String var body: some View { let states: [UsStatesModel] = parseJson("UsStatesCoordinates.json") let stateObject = states.first(where: { $0.state == state }) let region = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: stateObject?.latitude ?? 40.741895, longitude: stateObject?.longitude ?? -73.989308), span: MKCoordinateSpan(latitudeDelta: 3.5, longitudeDelta: 3.5)) Map(coordinateRegion: .constant(region)) .frame(height: 350) } // MARK: - PARSE JSON private func parseJson<T: Decodable>(_ filename: String) -> T { let data: Data guard let file = Bundle.main.url(forResource: filename, withExtension: nil) else { fatalError("Couldn't find \(filename) in main bundle.") } do { data = try Data(contentsOf: file) } catch { fatalError("Couldn't load \(filename) from main bundle:\n\(error)") } do { let decoder = JSONDecoder() return try decoder.decode(T.self, from: data) } catch { fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)") } } } struct MapSection_Previews: PreviewProvider { static var previews: some View { MapSection(state: "California") } }