Visual_Novel_iOS/crush/Crush/Src/Utils/CodableHelper.swift

57 lines
1.6 KiB
Swift
Raw Normal View History

2025-10-09 10:29:35 +00:00
//
// 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)
}
}