首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SWIFT2.2:类型'()‘不符合协议'BooleanType’

SWIFT2.2:类型'()‘不符合协议'BooleanType’
EN

Stack Overflow用户
提问于 2016-04-28 17:36:47
回答 2查看 97关注 0票数 0

我把Objective方法转换成Swift。然后,进入Swift代码,我得到了这个错误。我所做的错事,我没有任何约束。

目标-C代码

代码语言:javascript
运行
复制
- (id)initWithCoder:(NSCoder *)aDecoder
{
    if ((self = [super initWithCoder:aDecoder])) {
        [self loadChecklistItems];
    }
    return self;
}

Swift 2.2代码

代码语言:javascript
运行
复制
convenience required init(coder aDecoder: NSCoder) {
    if (self.init(coder: aDecoder)) {  // ERROR Here
        self.loadChecklistItems()
    }
}

以下是Swift代码的截图

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-28 17:38:23

只需直接调用初始化程序:

代码语言:javascript
运行
复制
convenience required init(coder aDecoder: NSCoder) {
    self.init(coder: aDecoder)
    self.loadChecklistItems()
}

但是,请注意,您的代码正在进行无限循环的调用。你确定不想打电话给super.init(...)吗?此外,我认为这不是一个方便的初始化程序:

代码语言:javascript
运行
复制
required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    self.loadChecklistItems()
}
票数 0
EN

Stack Overflow用户

发布于 2016-04-28 17:39:38

该初始化程序是可失败的,这意味着它可以返回零。Swift中的可故障初始化器的语法是:

代码语言:javascript
运行
复制
convenience required init?(coder aDecoder: NSCoder) {  // Note the question mark after init

此外,如果您从内部调用该初始化器,您的代码将无限循环。我想你的意思是:

代码语言:javascript
运行
复制
convenience required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)  // call super.init, not self.init
    self.loadChecklistItems()
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36921770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档