我是swiftUI的新手,并尝试创建用于显示图像API中图像的简单应用程序 我从url中获取了图像,但无法在Imageview中显示它,我有按钮,当我按它时,它调用api并返回单个图像url,我不知道问题出在哪里
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()
}
}
以及返回图像网址的网络调用方,我将其更改为图像,然后将其传递给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
}
}
}