fix图片预加载
This commit is contained in:
parent
34d3c5ad9b
commit
91718319f8
@ -19,13 +19,17 @@ final class CacheManager {
|
||||
self.cacheDir = paths[0]
|
||||
}
|
||||
|
||||
// 预加载图片
|
||||
func preloadImages(urls: [String]) async throws {
|
||||
let preloadUrls = urls.filter { url in !self.fileExists(urlString: url)}
|
||||
|
||||
// 批量异步加载
|
||||
try await withThrowingTaskGroup(of: Void.self) { group in
|
||||
for url in urls {
|
||||
for url in preloadUrls {
|
||||
group.addTask {
|
||||
if let data = try? await self.downloadImage(from: url) {
|
||||
try? self.saveCacheFile(filename: "xx", data: data)
|
||||
if let filename = self.getCacheFileName(urlString: url),
|
||||
let data = try? await self.downloadImage(from: url) {
|
||||
try? self.saveCacheFile(filename: filename, data: data)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -33,6 +37,29 @@ final class CacheManager {
|
||||
}
|
||||
}
|
||||
|
||||
// 判断缓存文件是否存在
|
||||
func fileExists(urlString: String) -> Bool {
|
||||
guard let cacheFileName = getCacheFileName(urlString: urlString) else {
|
||||
return false
|
||||
}
|
||||
|
||||
let url = cacheDir.appendingPathComponent(cacheFileName)
|
||||
return FileManager.default.fileExists(atPath: url.path())
|
||||
}
|
||||
|
||||
// 读取文件内容
|
||||
func readFileContents(urlString: String) -> Data? {
|
||||
guard let cacheFileName = getCacheFileName(urlString: urlString) else {
|
||||
return nil
|
||||
}
|
||||
|
||||
let url = cacheDir.appendingPathComponent(cacheFileName)
|
||||
if FileManager.default.fileExists(atPath: url.path()) {
|
||||
return try? Data(contentsOf: url)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 保存文件到缓存
|
||||
private func saveCacheFile(filename: String, data: Data) throws {
|
||||
let fileURL = cacheDir.appendingPathComponent(filename)
|
||||
|
||||
@ -143,11 +143,21 @@ struct IndexMainView: View {
|
||||
indexModel.visiblePublisher.send(frames)
|
||||
}
|
||||
.onAppear {
|
||||
let x = CacheManager.shared.getCacheFileName(urlString: "https://www.baidu.com/x/y/z.jpg?ts=1234")
|
||||
let x1 = CacheManager.shared.getCacheFileName(urlString: "https://www.baidu.com/x/y/z.jpg")
|
||||
print("x: \(x), x1: \(x1)")
|
||||
Task {
|
||||
let imageUrl = "https://lain.bgm.tv/pic/cover/l/ea/c4/479788_3pcsw.jpg"
|
||||
let cacheManager = CacheManager.shared
|
||||
|
||||
try await cacheManager.preloadImages(urls: [imageUrl])
|
||||
|
||||
let result = cacheManager.fileExists(urlString: imageUrl)
|
||||
print("cache file exists: \(result)")
|
||||
|
||||
print("data: ")
|
||||
print(cacheManager.readFileContents(urlString: imageUrl))
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user