我有一个 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.
| 归档时间: |
|
| 查看次数: |
4782 次 |
| 最近记录: |