ios - jsondecoder - swift 4 object to dictionary
Usando JSONEncoder para codificar una variable con Codable como tipo (2)
Necesitas usar una función genérica con un tipo genérico Encodable
Tu no puedes
func toData(object: Encodable) throws -> Data {
let encoder = JSONEncoder()
return try encoder.encode(object) // Cannot invoke ''encode'' with an argument list of type ''(Encodable)''
}
Usted puede
func toData<T: Encodable>(object: T) throws -> Data {
let encoder = JSONEncoder()
return try encoder.encode(object)
}
Logré que tanto la codificación como la decodificación JSON y plist funcionaran, pero solo llamando directamente a la función codificar / decodificar en un objeto específico.
Por ejemplo:
struct Test: Codable {
var someString: String?
}
let testItem = Test()
testItem.someString = "abc"
let result = try JSONEncoder().encode(testItem)
Esto funciona bien y sin problemas.
Sin embargo, estoy tratando de obtener una función que tome solo la Codable
protocolo Codable
como tipo y Codable
ese objeto.
func saveObject(_ object: Encodable, at location: String) {
// Some code
let data = try JSONEncoder().encode(object)
// Some more code
}
Esto resulta en el siguiente error:
No se puede invocar ''codificar'' con una lista de argumentos de tipo ''(codificable)''
Mirando la definición de la función de codificación, parece que debería ser capaz de aceptar Encodable
, a menos que el Value
sea un tipo extraño que no conozco.
open func encode<Value>(_ value: Value) throws -> Data where Value : Encodable
Utilice un tipo genérico restringido a Encodable
func saveObject<T : Encodable>(_ object: T, at location: String) {
//Some code
let data = try JSONEncoder().encode(object)
//Some more code
}