如何在Swift的扩展中重新定义默认类init()?

如何在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

我已经得到了todo list应用程序的类描述,如下所示:

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(),因为我根本不想更改视图——只需更改(甚至只是添加)模型的某些部分。