swift - SwiftUI 加载的异步图像未显示
问题描述
我想将 xml 文件中的图像异步加载到我的 SwiftUI 视图中,但它不起作用。加载的图像未显示。但是,如果我使用Data(contentsOf: imageURL)方法一切都很好!
你有什么想法吗?
这是 xml 解析器片段:
// 2
func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
if elementName == "item" {
let imageURL = URL(string: podcastImage)!
//let imageData = try! Data(contentsOf: imageURL) // load sync and works
//let image = UIImage(data: imageData) // load sync and works
let remoteImageLoader = ImageLoader(imageURL: imageURL) // Async not showing images
let image = UIImage(data: remoteImageLoader.data) // Async not showing images
podcasts.append(
Station(
name: podcastTitle,
detail: "Podcast",
url: URL(string: podcastURL)!,
image: image,
imageUrl: podcastImage
))
}
}
这是图像加载器
import Combine
import SwiftUI
class ImageLoader: ObservableObject {
@Published var data: Data = Data()
init(imageURL: URL) {
URLSession.shared.dataTask(with: imageURL) { data, response, error in
guard let recievedData = data, error == nil else {
print("Error: No Data")
return
}
print("Got Data") // Doesn't output to console
print(recievedData) // Doesn't output to console
DispatchQueue.main.async {
self.data = recievedData
}
}
.resume()
}
}
播客就是这样的结构,我在其他文件/视图中使用它
struct Station: Identifiable, Hashable {
var id = UUID()
let name: String
let detail: String
let url: URL
var image: UIImage?
let imageUrl: String
init(name: String, detail: String, url: URL, image: UIImage? = nil, imageUrl: String) {
self.name = name
self.detail = detail
self.url = url
self.image = image
self.imageUrl = imageUrl
}
}
解决方案
推荐阅读
- cloud - 云计算锁定
- keras - Keras:SimpleRNN - 如何在每个时间步输入新输入(而不是使用输出)
- c# - 在 C# 中使用 POST 请求登录网站
- java - 如何为 Selenium 中的以下跨度类编写 XPATH?
- r - Add a new vector to a nested list
- python - Docker:如何容器化从终端获取输入的控制台应用程序
- ruby - Windows 上的 Ruby PATH 噩梦——PATH 变量不起作用
- php - 如何修复 json 对象错误地添加到数据库?
- javascript - 将此代码段从 Perl 转换为 Javascript
- jquery - 如何使用 Jquery tablesorter 对包含 Kbps Mbps Gbps 的列进行排序?