self.type
должен быть конкретным типом, а не протоколом.И вы все равно не можете создать экземпляр Decodable
.
Что вы можете сделать, это создать общий метод decode
, который принимает словарь в качестве параметра, например
func decode<T : Decodable>(from dictionary: [String : Decodable]) throws -> T {
let data = try JSONSerialization.data(withJSONObject: dictionary)
return try JSONDecoder().decode(T.self, from: data)
}
struct Person : Decodable {
let name : String
let age : Int
}
let dict : [String:Decodable] = ["name" : "Foo", "age" : 30]
let person : Person = try! decode(from: dict)