以下代码显示Xcode 6.3 Beta 3中的生成错误.该代码适用于Xcode 6.2和Xcode 6.3 Beta 2.
class MyView: UIView {
override init() {
super.init()
// Some init logic ...
}
override init(frame: CGRect) {
super.init(frame: frame)
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Run Code Online (Sandbox Code Playgroud)
初始化程序不会覆盖其超类中的指定初始值设定项
有一种可能的解决方法,即使用Beta 3发行说明中提到的init方法创建协议.我无法兼顾它们init和init(frame: CGRect)初始化器.
如何修复这些构建错误?
Man*_*Mac 17
子类的指定初始值设定项需要调用Superclass的指定初始值设定项.便捷初始化器只能调用另一个便利初始化器或该类的指定初始化器.
init()是UIView的一个便利初始化器,如果你是UIView的子类,你应该调用它的指定初始化器,它是init(frame:frame)
override init() {
super.init(frame: frame)
// Some init logic ...
}
Run Code Online (Sandbox Code Playgroud)
编辑:显然在Beta 3中,UIView没有称为init的便捷初始化程序,所以你也需要删除override关键字,现在这是一个指定的初始化程序,所以你需要调用超类的指定初始化程序
init() {
super.init(frame: frame)
// Some init logic ...
}
Run Code Online (Sandbox Code Playgroud)
编辑:虽然这有效,但我认为更好的方法是写这个:
convenience init() {
self.init(frame:CGRectZero)
}
Run Code Online (Sandbox Code Playgroud)
来源:Swift文档
规则1指定的初始化程序必须从其直接超类中调用指定的初始化程序.
规则2便捷初始化程序必须从同一个类调用另一个初始化程序.
规则3便利初始化程序必须最终调用指定的初始化程序.
| 归档时间: |
|
| 查看次数: |
8876 次 |
| 最近记录: |