Swift 2.2: 类型 '()' 不符合协议 'BooleanType'
Swift 2.2: Type '()' does not conform to protocol 'BooleanType'
我已将 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
请告诉我哪里做错了,正确的代码是什么。
直接调用初始化器即可:
convenience required init(coder aDecoder: NSCoder) {
self.init(coder: aDecoder)
self.loadChecklistItems()
}
但是请注意,您的代码正在无限循环调用。您确定不想致电 super.init(...)
吗?另外,我认为这不是 convenience 初始化程序:
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.loadChecklistItems()
}
那个初始化器是可失败的,这意味着它可以 return 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()
}
我已将 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
请告诉我哪里做错了,正确的代码是什么。
直接调用初始化器即可:
convenience required init(coder aDecoder: NSCoder) {
self.init(coder: aDecoder)
self.loadChecklistItems()
}
但是请注意,您的代码正在无限循环调用。您确定不想致电 super.init(...)
吗?另外,我认为这不是 convenience 初始化程序:
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.loadChecklistItems()
}
那个初始化器是可失败的,这意味着它可以 return 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()
}