Swift 2.2:类型'()'不符合协议'BooleanType'

时间:2016-04-28 17:36:48

标签: swift swift2 nscoder

我已将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

请告诉我我做错了什么以及什么是正确的代码。

2 个答案:

答案 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()
}