升级到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) } 

重要! 使用委托模式时,请始终将委托属性声明为以避免引用循环 。