ios - 无法在swiftUI中显示来自url的图像
问题描述
我是 swiftUI 新手并尝试创建简单的应用程序来显示来自图像 API 的图像我从 url 获取图像但无法在 Imageview 中显示它,我有按钮,当我按下它时,它调用 api 并返回单个图片网址,我不知道问题出在哪里
import SwiftUI
struct ContentView: View {
@ObservedObject var NetworkManager = Network()
var body: some View {
ZStack{
VStack{
ImageDog(UIDogImage:self.NetworkManager.Dog ?? UIImage(systemName: "photo")!)
Button(action: {
self.NetworkManager.ApiCaller()
}) {
Text("GET DOG").font(.system(size: 20)).foregroundColor(Color(#colorLiteral(red: 0.5272222161, green: 0.6115953326, blue: 0.6786056161, alpha: 1))).padding()
}.background(Color(#colorLiteral(red: 0.5401973128, green: 0.9296894073, blue: 0.6209766269, alpha: 1))).cornerRadius(20)
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct ImageDog: View {
@State var UIDogImage:UIImage
var body: some View {
Image(uiImage:UIDogImage).resizable().frame(width: 200, height: 200, alignment: .center).padding()
}
}
和图像 url 返回的网络调用者,我将其更改为图像,然后将其传递给 Dog 属性图像
import SwiftUI
class Network:ObservableObject {
@Published var Dog:UIImage?
// This Api return random dog images every time you request it
// https://dog.ceo/api/breeds/image/random
// MARK: Network Caller
func ApiCaller(){ // used URLSession for Network requesting and Codable For parsing JSON
// 1 :: create URL
if let DogURL = URL(string: "https://dog.ceo/api/breeds/image/random") {
// 2 :: create URLSession
let session = URLSession(configuration: .default)
// 3 :: give Sesion Task
let Dogtask = session.dataTask(with: DogURL) { (data, response, error) in
if error == nil {
if let DogData = data {
do {
let DogResponseResult = try JSONDecoder().decode(DogResponse.self, from: DogData)
print(DogResponseResult.message!)
if let data = try? Data(contentsOf: URL(string: DogResponseResult.message!)!){
DispatchQueue.main.async {
self.Dog = UIImage(data: data)
}
}
}catch{
print(error)
}
}
}
}
// 4 :: Start Session Task
Dogtask.resume() // Send the request here
}
}
}
解决方案
推荐阅读
- c++ - 为什么我们需要pair
插入 (value_type&& val); std::set 的插入函数的版本 - reactjs - 如何以不同的方式考虑字符串和数字来修复 Typescript
- javascript - 每次更新后列表自动滚动到底部
- r - 通过 R 中的共同朋友连接节点
- postgresql - Postgres 逻辑复制 - 限制每个发布者/订阅者的带宽
- java - 使用递归查找所有可能的长度为 k 的字符串
- python-3.x - Selenium - 在抓取谷歌地图时无法找到此类元素
- python - 使用 pytest-mock mocker 来模拟对象结构
- java - 在 Java11 Appengine 项目中配置静态文件 (CSS)
- android-studio - Logcat android studio 中缺少左侧选项卡。如何找回