Ios Can';无法在swiftUI中显示url中的图像
我是swiftUI新手,尝试创建一个简单的应用程序,用于显示来自图像API的图像 我从url获取图像,但无法在Imageview中显示,我有一个按钮,当我按下它时,它调用api并返回单个图像url,我不知道问题出在哪里Ios Can';无法在swiftUI中显示url中的图像,ios,swift,swiftui,Ios,Swift,Swiftui,我是swiftUI新手,尝试创建一个简单的应用程序,用于显示来自图像API的图像 我从url获取图像,但无法在Imageview中显示,我有一个按钮,当我按下它时,它调用api并返回单个图像url,我不知道问题出在哪里 import SwiftUI struct ContentView: View { @ObservedObject var NetworkManager = Network() var body: some View { ZSt
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,我将其更改为image,然后将其传递给Dog属性image
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
}
}
}
您未正确使用
@ObservedObject
。查看链接的Q&A,了解如何在视图中声明网络
。只需从UIdogImage和app中删除@state即可解决此错误。您使用的@ObservedObject
。查看链接的Q&A,了解如何在视图中声明网络
。只需从UIdogImage中删除@state即可解决此错误,应用程序运行良好