我有一个 Codable 类:
class Task: Codable {
var name: String
}
Run Code Online (Sandbox Code Playgroud)
当我尝试实例化它时:
let newTask = Task()
allTasks.append(newTask)
Run Code Online (Sandbox Code Playgroud)
它给了我错误:
调用中缺少参数“from”的参数
我想要的只是将一个新对象(newTask)插入到一个数组中。什么是最简单的方法来做到这一点?
你可以从 NSObject 继承初始化器:
class Task: NSObject, Codable {
var name: String = ""
}
let newTask = Task()
Run Code Online (Sandbox Code Playgroud)
如果您不想继承 NSObject,那么只需创建您自己的初始化程序:
class Task: Codable {
var name: String?
init() {
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不想使name
可选(或将其设置为默认值),则必须在 init() 中对其进行初始化,例如:
class Task: Codable {
var name: String
init(withName name: String) {
self.name = name
}
}
let newTask = Task(withName: "ikevin8me")
Run Code Online (Sandbox Code Playgroud)
您的Task
类不提供自己的初始化程序,因此它获取Codable
协议中定义的初始化程序(它从Decodable
协议中获取)。
要么添加您自己的init
带有name
参数的显式,要么将您的类更改为结构体。无论哪种方式,您都需要Task
通过传入名称值来创建一个属性,以便name
可以初始化该属性。
这些都没有解决您发布的代码没有使用的事实Codable
,因此也许您的类(或结构)不需要符合Codable
.