【发布时间】:2014-08-19 10:30:53
【问题描述】:
我一直在一个小的 Mac 应用程序中使用 Swift。
我一直在尝试添加一个非可选的实例变量,但似乎我必须重写两个 init 方法。我最终得到(编译)的代码如下所示:
class CustomWindowController: NSWindowController {
var items: [Int]
required init(coder: NSCoder!) {
items = [1, 2, 3]
super.init(coder: coder)
}
override init(window: NSWindow!) {
items = [1, 2, 3]
super.init(window: window)
}
}
我试图抽象出items 初始化,但它不会编译,因为“`self 在超级初始化调用之前使用”。这是我尝试过的:
class CustomWindowController: NSWindowController {
var items: [Int]
required init(coder: NSCoder!) {
setup()
super.init(coder: coder)
}
override init(window: NSWindow!) {
setup()
super.init(window: window)
}
func setup() {
items = [1, 2, 3]
}
}
我有点困惑。这些是我的问题:
- 为什么我必须重写两个指定的初始化程序?我以为一般都有一个?
-
override和required之间有什么区别?为什么每个初始化程序都需要不同的? - 有没有办法抽象出初始化代码?
【问题讨论】: