我刚刚将我的代码从Swift 1.2更新为Swift 2.1。该项目与之前版本的Swift完全兼容,但现在我看到“模糊地使用'init'”错误。每次出现此错误似乎都是由构造函数中使用可选参数引起的。我甚至设法使用相同的模式使用以下简化代码在Xcode Playground中重现此问题:
class Item : UIView {
override init(frame: CGRect = CGRectZero) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
let i = Item() # Ambiguous use of 'init(frame:)'
但是,我仍然不明白为什么Swift 2.1现在有这个模式的问题,或替代应该是什么。我已经尝试过搜索这个,但我偶然发现的是由于方法重命名或签名更改导致的其他(非构造函数)方法的“模糊使用”错误,这两种情况都不是这样。
答案 0 :(得分:4)
这是不明确的用法,因为当你调用let i = Item()时,有2个选项 - init(frame:CGRect = CGRectZero)和init()
最好这样做:
override init(frame: CGRect) {
super.init(frame: frame)
}
convenience init() {
self.init(frame: CGRectZero)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}