我已将Objective-C方法转换为Swift。然后,进入Swift代码我得到了这个错误。我没有把我做错了。
Objective-C代码
- (id)initWithCoder:(NSCoder *)aDecoder
{
if ((self = [super initWithCoder:aDecoder])) {
[self loadChecklistItems];
}
return self;
}
Swift 2.2代码
convenience required init(coder aDecoder: NSCoder) {
if (self.init(coder: aDecoder)) { // ERROR Here
self.loadChecklistItems()
}
}
Here is the screenshot of Swift code
请告诉我我做错了什么以及什么是正确的代码。
答案 0 :(得分:0)
直接调用初始化程序:
convenience required init(coder aDecoder: NSCoder) {
self.init(coder: aDecoder)
self.loadChecklistItems()
}
但请注意,您的代码正在进行无限循环的调用。您确定不想拨打super.init(...)
吗?另外,我认为这不是便利性初始化程序:
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.loadChecklistItems()
}
答案 1 :(得分:0)
该初始化程序是可用的,这意味着它可以返回nil。 Swift中可用的初始化程序的语法是:
convenience required init?(coder aDecoder: NSCoder) { // Note the question mark after init
此外,如果您从内部调用该初始化程序,您的代码将无限循环。我想你的意思是:
convenience required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder) // call super.init, not self.init
self.loadChecklistItems()
}