这是在一个全新的Xcode项目上发生的。我添加的第一个类是UIView
的子类,它的工作原理如下:
class CIHomeView: UIView {
init() {
super.init(frame: CGRectZero)
print("test")
}
但是,只要我添加延迟:
class CIHomeView: UIView {
init() {
defer { super.init(frame: CGRectZero) }
print("abc")
}
我收到了分段错误编译错误。此外,Xcode的语法突出显示暂时停止工作。很奇怪。我的理解是,从Swift 2.0开始可以使用defer,而我确实在运行Swift 2.2。
答案 0 :(得分:1)
defer
在init
方法中是非法的。编译器想告诉你,但是在它可以这样做之前就崩溃了。
在即将到来的Swift 3迭代中,有一个提议可以解决这个问题,并且在某些情况下允许defer
在这种情况下工作,因为有充分的理由这样做;但在那之前,不要这样做。
然而,你肯定永远不允许在你的super
中拨打defer
,因为这会完全违反在此期间必须完成的订单的规则初始化。你要做的特别的事情是一个糟糕的主意。编译器以安全和一致的方式知道初始化的规则;听取编译器。