gpt4 book ai didi

swift - 如何在SwiftUI中显示来自URL的图像

转载 作者:行者123 更新时间:2023-12-03 09:19:00 25 4
gpt4 key购买 nike

因此,我尝试使用从Node JS服务器获取的数据创建内容供稿。

在这里,我从我的API中获取数据

class Webservice {
func getAllPosts(completion: @escaping ([Post]) -> ()) {
guard let url = URL(string: "http://localhost:8000/albums")
else {
fatalError("URL is not correct!")
}

URLSession.shared.dataTask(with: url) { data, _, _ in

let posts = try!

JSONDecoder().decode([Post].self, from: data!); DispatchQueue.main.async {
completion(posts)
}
}.resume()
}
}

将变量设置为从API 获取的数据
final class PostListViewModel: ObservableObject {

init() {
fetchPosts()
}

@Published var posts = [Post]()

private func fetchPosts() {
Webservice().getAllPosts {
self.posts = $0
}
}


}
struct Post: Codable, Hashable, Identifiable {

let id: String
let title: String
let path: String
let description: String
}

SwiftUI
struct ContentView: View {

@ObservedObject var model = PostListViewModel()

var body: some View {
List(model.posts) { post in
HStack {
Text(post.title)
Image("http://localhost:8000/" + post.path)
Text(post.description)

}

}
}

}

正确显示了 post.titlepost.description中的文本,但是 Image()中没有显示任何内容。如何使用服务器中的URL与图像一起显示?

最佳答案

首先,您需要从url获取图像:

class ImageLoader: ObservableObject {
var didChange = PassthroughSubject<Data, Never>()
var data = Data() {
didSet {
didChange.send(data)
}
}

init(urlString:String) {
guard let url = URL(string: urlString) else { return }
let task = URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data else { return }
DispatchQueue.main.async {
self.data = data
}
}
task.resume()
}
}

您也可以将其作为Webservice类功能的一部分。

然后在您的ContentView结构中,您可以通过以下方式设置@State图片:

struct ImageView: View {
@ObservedObject var imageLoader:ImageLoader
@State var image:UIImage = UIImage()

init(withURL url:String) {
imageLoader = ImageLoader(urlString:url)
}

var body: some View {

Image(uiImage: image)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width:100, height:100)
.onReceive(imageLoader.didChange) { data in
self.image = UIImage(data: data) ?? UIImage()
}
}
}

另外,如果您需要更多此 tutorial的引用,

关于swift - 如何在SwiftUI中显示来自URL的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60677622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com