I'm a beginner in SwiftUI and I'm trying to dev an app for iOS.
I'm trying to use datas from an API request to Text them in my main view struct where I put my different vstack, hstack etc...
So to do that I followed this tutorial: https://www.youtube.com/watch?v=lFE-TJJxxLU
My API response is: https://api.ethermine.org/miner/b5404f020334f52b33012af3587e69305eabee2c/dashboard
So I prepare my model like that:
import Foundation
struct ethermineResponse: Decodable {
var status : String
var data : dataDetails
}
struct dataDetails: Decodable {
var statistics : [statistics]
var workers : [workers]
var currentStatistics : currentStatistics
var settings : settings
}
struct statistics: Decodable {
var time : Date
var reportedHashrate : Double
var currentHashrate : Double
var validShares : Double
var invalidShares : Int
var staleShares : Int
var activeWorkers : Int
}
struct workers: Decodable {
var worker : String
var time : Date
var lastSeen : Date
var reportedHashrate : Double
var currentHashrate : Double
var validShares : Double
var invalidShares : Int
var staleShares : Int
}
struct currentStatistics: Decodable {
var time : Date
var lastSeen : Date
var reportedHashrate : Double
var currentHashrate : Double
var validShares : Double
var invalidShares : Double
var staleShares : Int
var activeWorkers : Int
var unpaid : Double
}
struct settings: Decodable {
var monitor : Int
var minPayout : Double
var email : String
}
And I coded my request:
import Foundation
enum dataError: Error{
case noDataAvailable
case canNotProcessData
}
struct ethermineRequest {
let resourceURL:URL
init(wallet: String) {
let resourceString = "https://api.ethermine.org/miner/\(wallet)/dashboard"
guard let resourceURL = URL(string: resourceString) else {fatalError()}
self.resourceURL = resourceURL
}
func getData(completionHandler: @escaping (Result<ethermineResponse, dataError>) -> Void){
let task = URLSession.shared.dataTask(with: resourceURL) { data, _, _ in
guard let jsondata = data else {
completionHandler(.failure(.noDataAvailable))
return
}
do{
let ETHData = try JSONDecoder().decode(ethermineResponse.self, from: jsondata)
completionHandler(.success(ETHData))
}catch{
print("error")
}
}
task.resume()
}
}
And in my main view struct I'm trying to text for exemple my "unpaid" value in a VStack like:
VStack{
let API = ethermineRequest(wallet: wallet)
API.getData { (ethermineResponse) in
Text(currentStatistics.unpaid!)
}
Spacer()
}
But I have this error in my:
var body: some View
"Failed to produce diagnostic for expression; please file a bug report"
How can I Text for example the unpaid value from my API request ?
Thanks :)
print("error")=>print("Error: \(error)"), print theerror, it might give informations!. - Larme