如何快速解析不同结构的请求



我有几个url,因此,每个url都有一个数据结构。url:

case "Get Day":
return "time/get_day.php"
case "Get Time":
return "time/get_time.php"
case "Get Current Time":
return "user/get_current_time.php"

结构:

struct Day: Codable {
var status: Int? = nil
var error_message: String? = nil
var result: [Result]? = nil
}
struct Time: Codable {
let status: Int?
let error_message: String?
let result: [Result]?

struct Result: Codable {
let id: String
let startTime: String
let endTime: String
}
}
struct CurrentTime: Codable {
let status: Int?
let error_message: String?
let current_time: Int?
}
struct Result: Codable {
let id: String
let name_en: String
let name_ru: String
let name_kk: String
}

目前我有一个parseJson()函数。其中,我可以手动更改一个接一个解析的结构类型。但是我想不出如何做到这一点,这样我就不会手动更改代码中的任何内容。

func parseJson(data: Data)  {
let decoder = JSONDecoder()
do {
let parsedData = try decoder.decode(Day.self, from: data)

print(parsedData)
} catch {
print("Error parsing Json:(error)")
}
}

如果你有例子或想法,请与我分享。

// Generic function to decode any decodable struct
func parseJson<T: Decodable>(data: Data) -> T?  {
let decoder = JSONDecoder()
do {
let parsedData = try decoder.decode(T.self, from: data)
return parsedData
} catch {
return nil
}
}
// Usage
let someDay: Day? = parseJson(data: dayData)
let sometime: Time? = parseJson(data: timeData)

最新更新