func load(url: URL, completion: @escaping (Data?, Error?, Error?) -> ()) {
let networkSession = session(withPolicy: .reloadIgnoringLocalCacheData)
let localSession = session(withPolicy: .returnCacheDataDontLoad)
networkSession.dataTask(with: url) { (networkData, networkResponse, networkError) in
guard networkError == nil else {
localSession.dataTask(with: url) { (cacheData, cacheResponse, cacheError) in
completion(cacheData, networkError, cacheError)
}.resume()
}
completion(networkData,nil,nil)
}.resume()
}
func session(withPolicy policy:NSURLRequest.CachePolicy, timeout: TimeInterval = 5)-> URLSession {
let config = URLSessionConfiguration.default
config.requestCachePolicy = policy
let cache = URLCache(memoryCapacity: 4 * 1024 * 1024, diskCapacity: 40 * 1024 * 1024, diskPath: "offline-cache")
URLCache.shared = cache
config.timeoutIntervalForRequest = 5
config.urlCache = cache
return URLSession(configuration: config)
}