【发布时间】:2014-11-10 17:51:47
【问题描述】:
Swift (1.0) 继承让我难以置信。我可以相信必须问一些像这样简单的事情,但我无法弄清楚。我有我的自定义视图,我希望能够使用 init(frame: CGRect) 以编程方式创建它,并从故事板加载它,在这种情况下,应该使用 init(coder aDecoder: NSCoder) 进行初始化。在这两种情况下,我都想调用我的自定义设置方法。像这样:
import UIKit
class CustomView: UIView {
override convenience init(frame: CGRect) {
super.init(frame: frame)
self.myCustomSetup()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.myCustomSetup()
}
func myCustomSetup() {
self.backgroundColor = UIColor.redColor()
}
}
这似乎不起作用,从 swift 文档中我了解到,所有便利初始化程序都调用的类应该只有一个指定的初始化程序。在 UIView 的情况下,这应该是 init(coder aDecoder: NSCoder)。但是,我不能在init(frame: CGRect) 中创建aDecoder: NSCoder,我也不能将 nil 传递为它不是可选的。我该怎么办 ?我怎样才能同时覆盖它们?
【问题讨论】:
-
initWithFrame:也是一个指定的初始化器。 -
是的,这行得通,谢谢。 Xcode建议使用方便关键字:-(好吧,我不明白的是。从文档中,每个类应该只有一个指定的初始化程序。所有其他初始化都应该调用那个。我怎么能初始化我的类(和UIView)有两个独立的。在某种意义上分开一个不会调用另一个指定的另一个?我错了什么?
-
你确定吗?对我来说听起来不对。也许,作为一个指导方针,您应该尽可能地指定一些初始化器,但限制为一个是没有意义的。
initWithFrame:和initWithCoder:尽可能不同。 -
非常感谢,我似乎错了。