Swift Initialiser Bug?

时间:2016-04-22 22:14:48

标签: swift initialization infinite-loop

编辑:已完成,重复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甚至可以运行它。 我觉得这种事情在语言中是一个明显的问题。它在课堂上没问题吗? - 因为这些都是便利的初始化者?

1 个答案:

答案 0 :(得分:2)

这只是一个无限循环的情况,您的init()函数调用init(value:),然后又调用init(),依此类推,所以它永远不会结束。好吧,当堆栈溢出并崩溃时它会结束。