升级到Swift 3后,属性’self.delegate’未在super.init调用时初始化
升级到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) }
有关如何纠正此问题的任何建议?
我假设你的类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) }
重要! 使用委托模式时,请始终将委托属性声明为弱以避免引用循环 。