【问题标题】:Swift 2.2: Type '()' does not conform to protocol 'BooleanType' [duplicate]Swift 2.2:类型“()”不符合协议“BooleanType”[重复]
【发布时间】:2016-04-28 17:36:47
【问题描述】:

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

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

【问题讨论】:

标签: swift swift2 nscoder


【解决方案1】:

直接调用初始化器即可:

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

【讨论】:

    【解决方案2】:

    该初始化程序是可失败的,这意味着它可以返回 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()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      • 2014-11-08
      • 1970-01-01
      相关资源
      最近更新 更多