48 lines
1.3 KiB
Swift
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)
|
|
}
|
|
}
|
|
}
|
|
}
|