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

问题描述 投票:0回答:1

我已经有了待办事项列表应用程序的类描述,如下所示:

class TaskStore: ObservableObject {
    @Published var tasks: Task = [
        Task("Programm app"),
        Task("Clean up apartment",
        Task("Buy NY gifts")
        Task("Decorate Christmas tree")
    ]
}

我想使用扩展名重新定义其初始化程序(而无需触摸先前的代码),以便能够从.json文件中读取已经存在的待办事项,或者默认情况下可以像下面这样初始化:

extension TaskStore {
    var storedTasks: [Task]? {
        // Code for downloading from .json file 
    }

    init() {
        if let storedTasks = let self.storedTasks {
            self.tasks = self.storedTasks
        }
    }
 }

问题是XCode编译器不允许在扩展名中放置便捷init()或指定的init(),因为类描述中未定义init()。

请帮助(重新)定义扩展名的init()。

swift xcode init
1个回答
0
投票

您不能这样做。

扩展程序将新功能添加到现有的类,结构,枚举或协议类型。这包括扩展能力您无权访问原始源代码的类型(称为追溯建模)。扩展名类似于类别在Objective-C中。 (与Objective-C类别不同,Swift扩展确实没有名字。)

https://docs.swift.org/swift-book/LanguageGuide/Extensions.html

© www.soinside.com 2019 - 2024. All rights reserved.