AnyCodable icon indicating copy to clipboard operation
AnyCodable copied to clipboard

Converting AnyCodable to Any Struct Model

Open alicankurtFinago opened this issue 3 years ago • 1 comments

Hi, I want to create generic/dynamic structure and convert AnyCodable to -> Login/Register/X Response Model.

I easily convert Model to AnyCodable like this -> AnyCodable( LoginResponseModel(parameter: "") ) However, if i want to convert AnyCodable to Model, i must follow this steps;

1- Converting Object To Json String 2- Converting Json String To Json Data 3- Converting Json Data To Model

Is there any easier way?

alicankurtFinago avatar Apr 01 '22 07:04 alicankurtFinago

Hi @alicankurtFinago, my solution

import Foundation
import AnyCodable

extension Encodable {
    
    public func transformToAnyCodable(
        using encoder: JSONEncoder = JSONEncoder(),
        decoder: JSONDecoder = JSONDecoder()
    ) throws -> AnyCodable {
        try transform(to: AnyCodable.self, using: encoder, decoder: decoder)
    }
    
    public func transform<T>(
        to type: T.Type,
        using encoder: JSONEncoder = JSONEncoder(),
        decoder: JSONDecoder = JSONDecoder()
    ) throws -> T where T: Decodable {
        let data = try encoder.encode(self)
        return try decoder.decode(type, from: data)
    }
}

usage

LoginResponseModel(parameter: "").transformToAnyCodable()

makleso6 avatar Apr 19 '23 08:04 makleso6