这个问题在这里已有答案:
如何在Swift中编写initwithcoder代码? 1个答案我已经将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() } }这是Swift代码的屏幕截图
请告诉我我做错了什么以及什么是正确的代码。
This question already has an answer here:
How to code initwithcoder in Swift? 1 answerI have converted an Objective-C method into Swift. And then, into the Swift code i am getting this error. I have no tied what i have done wrong.
Objective-C Code
- (id)initWithCoder:(NSCoder *)aDecoder { if ((self = [super initWithCoder:aDecoder])) { [self loadChecklistItems]; } return self; }Swift 2.2 code
convenience required init(coder aDecoder: NSCoder) { if (self.init(coder: aDecoder)) { // ERROR Here self.loadChecklistItems() } }Here is the screenshot of Swift code
Please tell me what i have done wrong and what will be the right code.
最满意答案
只需直接调用初始化程序:
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() }Just call the initializer directly:
convenience required init(coder aDecoder: NSCoder) { self.init(coder: aDecoder) self.loadChecklistItems() }However, note that your code is making an infinite cycle of calls. Are you sure you don't want to call super.init(...)? Also, I think that this is not a convenience initializer:
required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.loadChecklistItems() }更多推荐
发布评论