编辑:已完成,重复Why doesn't this obvious infinite recursion give a compiler warning? 我相信,鉴于Swift有许多聪明的警告以及指定的初始化系统,预期警告是合理的,但这是错误的,如上所述。
我通过使用协议扩展来找到这个有趣的例子,然后意识到它也搞砸了结构。
struct WhatThe {
let a = 1
init(value: Int) {
self.init()
}
init() {
self.init(0)
}
}
print(WhatThe().a) //nothing is printed and the CPU goes nuts.
这是一个bug不是吗?我明白这是一个无限循环,我真的很惊讶Apple允许这个。 此代码没有警告并且构建正常,Playground甚至可以运行它。 我觉得这种事情在语言中是一个明显的问题。它在课堂上没问题吗? - 因为这些都是便利的初始化者?
答案 0 :(得分:2)
这只是一个无限循环的情况,您的init()
函数调用init(value:)
,然后又调用init()
,依此类推,所以它永远不会结束。好吧,当堆栈溢出并崩溃时它会结束。