如何在Swift的扩展中重新定义默认类init()?
我已经得到了todo list应用程序的类描述,如下所示:如何在Swift的扩展中重新定义默认类init()?,swift,xcode,init,Swift,Xcode,Init,我已经得到了todo list应用程序的类描述,如下所示: class TaskStore: ObservableObject { @Published var tasks: Task = [ Task("Programm app"), Task("Clean up apartment", Task("Buy NY gifts") Task("Decorate Christmas tree") ] } extens
class TaskStore: ObservableObject {
@Published var tasks: Task = [
Task("Programm app"),
Task("Clean up apartment",
Task("Buy NY gifts")
Task("Decorate Christmas tree")
]
}
extension TaskStore {
var storedTasks: [Task]? {
// Code for downloading from .json file
}
init() {
if let storedTasks = self.storedTasks {
self.tasks = self.storedTasks
}
}
}
我想使用扩展名(不涉及前面的代码)重新定义它的初始化器,以便能够从.json文件或默认情况下的init中读取现有TODO,如下所示:
class TaskStore: ObservableObject {
@Published var tasks: Task = [
Task("Programm app"),
Task("Clean up apartment",
Task("Buy NY gifts")
Task("Decorate Christmas tree")
]
}
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()。您不能这样做
扩展将新功能添加到现有的类、结构、,
枚举或协议类型。这包括扩展的能力
您无权访问原始源代码的类型
(称为追溯建模)。扩展类似于类别
在Objective-C中(与Objective-C类别不同,Swift扩展可以
没有名字。)
扩展可以向类型添加新功能,但不能覆盖现有功能。如上所述,您不能更改现有初始值设定项,包括编译器提供的默认初始化。您可以添加一个新的初始值设定项,例如init(fromJSONFile:…)或init(fromExisting:…),它使用现有的初始值设定项来提供所需的功能。@bg2b,我想在不添加新参数的情况下重写init(),因为我根本不想更改视图-只需更改模型的某些部分。@iOSArchitect.com,谢谢!我想在不添加新参数的情况下重写init(),因为我根本不想更改视图-只需更改(甚至只是添加)模型的某些部分。非常感谢!现在我很清楚了。我想在不添加新参数的情况下重写init(),因为我根本不想更改视图——只需更改(甚至只是添加)模型的某些部分。