// // NetworkServiceCities.swift // Wallet // // Created by Saveliy Stavitsky on 10/23/20. // Copyright © 2020 List. All rights reserved. // import Foundation import CoreLocation extension Network.Service.Cities { typealias Model = Common.Model.City } extension Network.Service { class Cities: Common.Service.Provider { init() {} private var collection = [Language: [Model]]() } } extension Network.Service.Cities { func fetch(lang: Language, completion: @escaping ([Model]) -> Void) { fetchLocal(lang: lang, completion: completion) } } extension Network.Service.Cities { private func fetchLocal(lang: Common.Model.Language, completion: @escaping ([Common.Model.City]) -> Void) { if let list = collection[lang] { completion(list);return } DispatchQueue.global().async { guard let url = Bundle.main.url(forResource: "Cities_\(lang.rawValue)", withExtension: "json"), let data = try? Data(contentsOf: url) else { DispatchQueue.main.async { completion([]) } return } let collection: [City] = data.jsonDecoded(type: [City].self) ?? [] DispatchQueue.main.async { self.collection[lang] = collection completion(collection) } } } }