fix图片预加载
This commit is contained in:
parent
34d3c5ad9b
commit
91718319f8
@ -19,13 +19,17 @@ final class CacheManager {
|
|||||||
self.cacheDir = paths[0]
|
self.cacheDir = paths[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 预加载图片
|
||||||
func preloadImages(urls: [String]) async throws {
|
func preloadImages(urls: [String]) async throws {
|
||||||
|
let preloadUrls = urls.filter { url in !self.fileExists(urlString: url)}
|
||||||
|
|
||||||
// 批量异步加载
|
// 批量异步加载
|
||||||
try await withThrowingTaskGroup(of: Void.self) { group in
|
try await withThrowingTaskGroup(of: Void.self) { group in
|
||||||
for url in urls {
|
for url in preloadUrls {
|
||||||
group.addTask {
|
group.addTask {
|
||||||
if let data = try? await self.downloadImage(from: url) {
|
if let filename = self.getCacheFileName(urlString: url),
|
||||||
try? self.saveCacheFile(filename: "xx", data: data)
|
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 {
|
private func saveCacheFile(filename: String, data: Data) throws {
|
||||||
let fileURL = cacheDir.appendingPathComponent(filename)
|
let fileURL = cacheDir.appendingPathComponent(filename)
|
||||||
|
|||||||
@ -143,11 +143,21 @@ struct IndexMainView: View {
|
|||||||
indexModel.visiblePublisher.send(frames)
|
indexModel.visiblePublisher.send(frames)
|
||||||
}
|
}
|
||||||
.onAppear {
|
.onAppear {
|
||||||
let x = CacheManager.shared.getCacheFileName(urlString: "https://www.baidu.com/x/y/z.jpg?ts=1234")
|
Task {
|
||||||
let x1 = CacheManager.shared.getCacheFileName(urlString: "https://www.baidu.com/x/y/z.jpg")
|
let imageUrl = "https://lain.bgm.tv/pic/cover/l/ea/c4/479788_3pcsw.jpg"
|
||||||
print("x: \(x), x1: \(x1)")
|
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