升级到Swift 3后,我现在收到此错误:
属性'self.delegate'未在super.init调用中初始化
在NSObject类定义
open class NSObject : NSObjectProtocol {
public init()
}
IQKeyboardReturnKeyHandler类
public override init() {
super.init() //Error here
}
public init(controller : UIViewController) {
super.init() //Error here
addResponderFromView(controller.view)
}
有关如何纠正此问题的任何建议吗?
答案 0 :(得分:1)
我假设你的类IQKeyboardReturnKeyHandler你有这样的声明:
weak var delegate: YourDelegateProtocol
由于它既不是可选的也不是隐式展开的,你必须在调用超类的初始值设定项之前初始化。
但是,使用委托模式,最好将您的委托属性声明为可选:
weak var delegate: YourDelegateProtocol?
在这种情况下,在调用超类的初始值设定项之前没有必要设置委托,因此您的代码将如下所示:
weak var delegate: YourDelegateProtocol?
public override init() {
super.init()
self.delegate = nil
}
public init(controller : UIViewController) {
super.init()
self.delegate = controller
addResponderFromView(controller.view)
}
重要!使用委托模式时,始终将您的委托属性声明为弱以避免reference cycles。