如何在 Class/func 和 View 之间传输数据
How to transfer data between Class/func and View
我从 API 中解码了 json 数据,现在我想将解码后的数据传输到我的视图中以显示它。
问题是我无法使用@Observable 对象将解码数据传输到我的视图。
我的解码 class 看起来像这样:
class apirefresh: ObservableObject {
@Published var datareturn : DataClass
func refreshData() {
let url = URL(string: "http://localhost:3000/Data")!
url.getResult { (result: Result<DataClass, Error>) in
switch result {
case let .success(dataout):
self.datareturn = dataout
print(dataout)
//print(dataout.klasse[0].aktive[0].name) //dataout.klasse[0].aktive[0].name
case let .failure(error):
print(error)
}
}
}
}
我的错误是这样的:
Class Error
我的视图中也出现错误,但这个错误似乎与之前的错误有关。
View Error
我的 json 模型如下所示:
// MARK: - APICall
struct APICall: Codable {
let data: DataClass
enum CodingKeys: String, CodingKey {
case data = "Data"
}
}
// MARK: - DataClass
struct DataClass: Codable {
let klasse: Klasse
let update: Update
}
// MARK: - Klasse
struct Klasse: Codable {
let aktive, bjugend, cjugend, djugend: [Verein]
let ejugend, fjugend, bambini: [Verein]
}
// MARK: - Aktive
struct Verein: Codable {
let id, place: String
let name: String
let tore, punkte: String
let gruppe: String
}
// MARK: - Update
struct Update: Codable {
let last: String
}
提前感谢您的帮助。
问题是 class 中的 datareturn
没有初始值,这就是编译器要求 class 初始化程序的原因,您可以在其中给出 datareturn
一个初始值。所以你必须这样做:
class apirefresh: ObservableObject {
@Published var datareturn : DataClass
init(datareturn: DataClass) {
self.datareturn = datareturn
}
func refreshData() {
let url = URL(string: "http://localhost:3000/Data")!
url.getResult { (result: Result<DataClass, Error>) in
switch result {
case let .success(dataout):
self.datareturn = dataout
print(dataout)
//print(dataout.klasse[0].aktive[0].name) //dataout.klasse[0].aktive[0].name
case let .failure(error):
print(error)
}
}
}
}
或者使 datareturn
成为可选的(这使得它的初始值 nil
)。
class apirefresh: ObservableObject {
@Published var datareturn : DataClass?
func refreshData() {
let url = URL(string: "http://localhost:3000/Data")!
url.getResult { (result: Result<DataClass, Error>) in
switch result {
case let .success(dataout):
self.datareturn = dataout
print(dataout)
//print(dataout.klasse[0].aktive[0].name) //dataout.klasse[0].aktive[0].name
case let .failure(error):
print(error)
}
}
}
}
我从 API 中解码了 json 数据,现在我想将解码后的数据传输到我的视图中以显示它。
问题是我无法使用@Observable 对象将解码数据传输到我的视图。
我的解码 class 看起来像这样:
class apirefresh: ObservableObject {
@Published var datareturn : DataClass
func refreshData() {
let url = URL(string: "http://localhost:3000/Data")!
url.getResult { (result: Result<DataClass, Error>) in
switch result {
case let .success(dataout):
self.datareturn = dataout
print(dataout)
//print(dataout.klasse[0].aktive[0].name) //dataout.klasse[0].aktive[0].name
case let .failure(error):
print(error)
}
}
}
}
我的错误是这样的: Class Error
我的视图中也出现错误,但这个错误似乎与之前的错误有关。
View Error
我的 json 模型如下所示:
// MARK: - APICall
struct APICall: Codable {
let data: DataClass
enum CodingKeys: String, CodingKey {
case data = "Data"
}
}
// MARK: - DataClass
struct DataClass: Codable {
let klasse: Klasse
let update: Update
}
// MARK: - Klasse
struct Klasse: Codable {
let aktive, bjugend, cjugend, djugend: [Verein]
let ejugend, fjugend, bambini: [Verein]
}
// MARK: - Aktive
struct Verein: Codable {
let id, place: String
let name: String
let tore, punkte: String
let gruppe: String
}
// MARK: - Update
struct Update: Codable {
let last: String
}
提前感谢您的帮助。
问题是 class 中的 datareturn
没有初始值,这就是编译器要求 class 初始化程序的原因,您可以在其中给出 datareturn
一个初始值。所以你必须这样做:
class apirefresh: ObservableObject {
@Published var datareturn : DataClass
init(datareturn: DataClass) {
self.datareturn = datareturn
}
func refreshData() {
let url = URL(string: "http://localhost:3000/Data")!
url.getResult { (result: Result<DataClass, Error>) in
switch result {
case let .success(dataout):
self.datareturn = dataout
print(dataout)
//print(dataout.klasse[0].aktive[0].name) //dataout.klasse[0].aktive[0].name
case let .failure(error):
print(error)
}
}
}
}
或者使 datareturn
成为可选的(这使得它的初始值 nil
)。
class apirefresh: ObservableObject {
@Published var datareturn : DataClass?
func refreshData() {
let url = URL(string: "http://localhost:3000/Data")!
url.getResult { (result: Result<DataClass, Error>) in
switch result {
case let .success(dataout):
self.datareturn = dataout
print(dataout)
//print(dataout.klasse[0].aktive[0].name) //dataout.klasse[0].aktive[0].name
case let .failure(error):
print(error)
}
}
}
}