2

I would like to make a helper function which takes input of encodable/decodable type in order to encode or decode json. I have tried

static func loadCache<T:Decodable>(fileName:String, type:T)throws->T{
        let data = try FileManager.loadCache(fileName: fileName)
        return try JSONDecoder().decode(T.self, from: data)
    }

Using the function

let products = try loadCache(fileName: Product.cacheFileName(), type: [Product])

I am getting error Type '[Product].Type' cannot conform to 'Decodable'

what is the correct way to pass this to a function Thanks

Nic Wanavit
  • 2,363
  • 5
  • 19
  • 31

1 Answers1

3

You're very close. Your syntax is just slightly incorrect. You want to pass the type as a value, not a value of the type, so this is the signature you need:

static func loadCache<T:Decodable>(fileName:String, type: T.Type) throws -> T{
                                                           ^^^^^

Swift requires that you be very explicit about passing types as values. It requires adding .self:

let products = try loadCache(fileName: Product.cacheFileName(),
                             type: [Product].self)
                                            ^^^^^
Rob Napier
  • 286,113
  • 34
  • 456
  • 610