【发布时间】:2021-03-30 13:30:45
【问题描述】:
我是 SwiftUI 的初学者,我正在尝试为 iOS 开发一个应用程序。
我正在尝试使用 API 请求中的数据在我的主视图结构中对它们进行文本处理,我将不同的 vstack、hstack 等放在其中...
为此,我遵循了本教程:https://www.youtube.com/watch?v=lFE-TJJxxLU
我的 API 响应是:https://api.ethermine.org/miner/b5404f020334f52b33012af3587e69305eabee2c/dashboard
所以我这样准备我的模型:
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
}
我编写了我的请求:
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()
}
}
在我的主视图结构中,我试图在 VStack 中以文本为例,例如我的“未付”值:
VStack{
let API = ethermineRequest(wallet: wallet)
API.getData { (ethermineResponse) in
Text(currentStatistics.unpaid!)
}
Spacer()
}
但我有这个错误:
var body: some View
“无法生成表达式诊断;请提交错误报告”
我如何发送我的 API 请求中的未付金额等文本?
谢谢:)
【问题讨论】:
-
不相关但
print("error")=>print("Error: \(error)"),打印error,它可能会提供信息!。 -
我试过了,现在我有更多细节:类型'currentStatistics.Type'不能符合'StringProtocol';只有结构/枚举/类类型可以符合协议并且类型“()”不能符合“视图”;只有结构/枚举/类类型可以符合协议