Я хочу получить json по модели кодирования, которая наследует базовый класс и соответствует протоколу Codable
. Но это не удалось.
Вот код:
// this is a func to get json
func getJson<T>(model: T) throws -> String where T: AnyObject, T: Codable {
let encoder = JSONEncoder()
let data = try encoder.encode(model)
if let json = String(data: data, encoding: String.Encoding.utf8) {
return json
} else {
return ""
}
}
class BaseClass: Codable {
var bx = 0
}
class SubClass: BaseClass {
var x = 1
var y = 2
}
// test if get json enable
func test1() throws {
let source = SubClass()
let json = try getJson(model: source)
print(json)
}
// how can i get json by this code
func test2() throws {
let source = SubClass()
var any: BaseClass?
any = source
let json = try getJson(model: any!)
print(json)
}
Я изменил код, как показано ниже, затем func test1()
поддержал правый JSON, но func test2()
был ошибкой:
class BaseClass {
var bx = 0
}
class SubClass: BaseClass, Codable {
var x = 1
var y = 2
}
Ждем вашей помощи!