【发布时间】:2019-12-23 11:09:21
【问题描述】:
我已经有一个待办事项列表应用程序的类描述,如下所示:
class TaskStore: ObservableObject {
@Published var tasks: Task = [
Task("Programm app"),
Task("Clean up apartment",
Task("Buy NY gifts")
Task("Decorate Christmas tree")
]
}
我想使用扩展名重新定义它的初始化程序(不接触以前的代码),以便能够从 .json 文件中读取已经存在的 todos 或默认初始化,如下所示:
extension TaskStore {
var storedTasks: [Task]? {
// Code for downloading from .json file
}
init() {
if let storedTasks = self.storedTasks {
self.tasks = self.storedTasks
}
}
}
问题在于 XCode 编译器不允许在扩展中放置方便的 init() 或指定的 init(),因为类描述中没有定义 init()。
请帮助(重新)在扩展中定义 init()。
【问题讨论】:
-
扩展可以为类型添加新功能,但不能覆盖现有功能。
-
如前所述,您无法更改现有的初始化程序,包括编译器提供的默认初始化程序。不过,您可以添加一个新的初始化程序,例如使用现有初始化程序提供所需功能的 init(fromJSONFile: ...) 或 init(fromExisting: ...)。
-
@bg2b,我想重写 init() 而不添加新参数,因为我根本不想更改视图 - 只需更改模型的某些部分。
-
@iOSArchitect.com,谢谢!我想在不添加新参数的情况下覆盖 init(),因为我根本不想更改视图 - 只是更改(甚至只是添加)模型的某些部分。