57 lines
1.6 KiB
Swift
57 lines
1.6 KiB
Swift
//
|
||
// CodableHelper.swift
|
||
// Crush
|
||
//
|
||
// Created by Leon on 2025/7/13.
|
||
//
|
||
|
||
import Foundation
|
||
|
||
enum CodableHelper {
|
||
|
||
static func decode<T: Decodable>(_ type: T.Type, from data: Data) -> T? {
|
||
//try? JSONDecoder().decode(T.self, from: data)
|
||
do {
|
||
return try JSONDecoder().decode(T.self, from: data)
|
||
} catch {
|
||
dlog("❌ 解码失败: \(error)")
|
||
return nil
|
||
}
|
||
}
|
||
|
||
static func decode<T: Decodable>(_ type: T.Type, from jsonString: String) -> T? {
|
||
guard jsonString.count > 0 else{
|
||
// dlog("⚠️jsonString is empty")
|
||
return nil
|
||
}
|
||
guard let data = jsonString.data(using: .utf8) else { return nil }
|
||
return decode(type, from: data)
|
||
}
|
||
|
||
static func decode<T: Decodable>(_ type: T.Type, from dictionary: [String: Any]) -> T? {
|
||
guard let data = try? JSONSerialization.data(withJSONObject: dictionary) else { return nil }
|
||
return decode(type, from: data)
|
||
}
|
||
|
||
static func encode<T: Encodable>(_ model: T) -> Data? {
|
||
try? JSONEncoder().encode(model)
|
||
}
|
||
|
||
static func encodeToJSONString<T: Encodable>(_ model: T) -> String? {
|
||
guard let data = encode(model) else { return nil }
|
||
return String(data: data, encoding: .utf8)
|
||
}
|
||
|
||
static func printJSON<T: Encodable>(_ model: T) {
|
||
if let json = encodeToJSONString(model) {
|
||
print(json)
|
||
} else {
|
||
print("⚠️ Encode to JSON failed")
|
||
}
|
||
}
|
||
|
||
static func jsonString(from data: Data) -> String? {
|
||
String(data: data, encoding: .utf8)
|
||
}
|
||
}
|