如何在 Swift 的扩展中重新定义默认的 class init()?
How to redefine default class init() in extension in Swift?
我已经得到了待办事项列表应用的 class 描述,如下所示:
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 = self.storedTasks {
self.tasks = self.storedTasks
}
}
}
问题是 XCode 编译器不允许在扩展中放置方便的 init() 或指定的 init(),因为 class 描述中没有定义 init()。
请帮助(重新)定义扩展中的 init()。
你不能那样做。
Extensions add new functionality to an existing class, structure,
enumeration, or protocol type. This includes the ability to extend
types for which you do not have access to the original source code
(known as retroactive modeling). Extensions are similar to categories
in Objective-C. (Unlike Objective-C categories, Swift extensions do
not have names.)
https://docs.swift.org/swift-book/LanguageGuide/Extensions.html
我已经得到了待办事项列表应用的 class 描述,如下所示:
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 = self.storedTasks {
self.tasks = self.storedTasks
}
}
}
问题是 XCode 编译器不允许在扩展中放置方便的 init() 或指定的 init(),因为 class 描述中没有定义 init()。
请帮助(重新)定义扩展中的 init()。
你不能那样做。
Extensions add new functionality to an existing class, structure, enumeration, or protocol type. This includes the ability to extend types for which you do not have access to the original source code (known as retroactive modeling). Extensions are similar to categories in Objective-C. (Unlike Objective-C categories, Swift extensions do not have names.)
https://docs.swift.org/swift-book/LanguageGuide/Extensions.html