I have a JSON file and a related class. I decode it by calling init?(data: Data) initializer. I'm fetching this JSON from an endpoint. I want to encrypt URL text with SHA-256. My problem is that I want to decrypt this URL string when decoding data. So when decoding URL, It needs to call a function. Any possible way to do this?
PS: I know I can write encrypted text and decrypt it where I'll use but I want to do this as last option.
struct TableCellData: Codable {
let type: Int
let cellText: String
let cellImage: String?
let url: URL?
let detailText: String?
let tableID: Int?
enum CodingKeys: String, CodingKey {
case type = "type"
case cellText = "cell_text"
case cellImage = "cell_image"
case url = "url"
case detailText = "detail_text"
case tableID = "table_id"
}
}
extension TableCellData {
init?(data: Data) {
guard let me = try? JSONDecoder().decode(TableCellData.self, from: data) else { return nil }
self = me
}
init?(_ json: String, using encoding: String.Encoding = .utf8) {
guard let data = json.data(using: encoding) else { return nil }
self.init(data: data)
}
init?(fromURL url: String) {
guard let url = URL(string: url) else { return nil }
guard let data = try? Data(contentsOf: url) else { return nil }
self.init(data: data)
}
var jsonData: Data? {
return try? JSONEncoder().encode(self)
}
var json: String? {
guard let data = self.jsonData else { return nil }
return String(data: data, encoding: .utf8)
}
}