升级到 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
由于它既不是可选的也不是隐式解包的,因此您必须初始化它before调用超类的初始化程序。
但是,使用委托模式,最好将委托属性声明为可选:
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)
}
重要的!当使用委托模式时,always将您的委托财产声明为weak避免参考周期 https://blog.bobthedeveloper.io/swift-retention-cycle-in-closures-and-delegate-836c469ef128?gi=f5d2274e9cc4.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)