Files
raspberry/iOS/Wallet/Sources/Network/Service/NetworkServiceCities.swift
2023-01-30 15:15:50 +03:00

48 lines
1.3 KiB
Swift

//
// 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)
}
}
}
}