Tengo una clase codificable:
class Task: Codable { var name: String }Cuando trato de instanciarlo:
let newTask = Task() allTasks.append(newTask)Me da error:
Argumento faltante para el parámetro 'desde' en la llamada
Todo lo que quiero es insertar un nuevo objeto (newTask) en una matriz. ¿Cuál es la forma más sencilla de hacer esto?
Puede heredar el inicializador de NSObject:
class Task: NSObject, Codable { var name: String = "" } let newTask = Task()Si no desea heredar NSObject, simplemente cree su propio inicializador:
class Task: Codable { var name: String? init() { } } Si no desea que el name sea opcional (o establecerlo como predeterminado), debe inicializarse en init() como:
class Task: Codable { var name: String init(withName name: String) { self.name = name } } let newTask = Task(withName: "ikevin8me")Otra solución más es usar struct
struct Task: Codable { var name: String } let task = Task(name: "myname")Su clase Task no proporciona su propio inicializador, por lo que obtiene el definido en el protocolo Codable (que obtiene del protocolo Decodable ).
Agregue su propio init explícito que tome un parámetro de name o cambie su clase a una estructura. De cualquier manera, debe crear una Task pasando un valor de nombre para que la propiedad de name pueda inicializarse.
Nada de esto aborda el hecho de que el código que publicó no utiliza Codable , por lo que tal vez no sea necesario que su clase (o estructura) se ajuste a Codable .