2016-06-08 9 views
1

Это происходит в совершенно новом проекте Xcode. Первый класс я добавил подкласс UIView, который прекрасно работает как это:ключевое слово Swift 'defer' вызывает ошибку сегментации

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, и я действительно запускаю Swift 2.2.

ответ

1

defer не применим в методе init. Компилятор хотел бы сказать вам об этом, но он сбой, прежде чем он сможет это сделать.

На столе есть предложение исправить это на предстоящей итерации Swift 3 и разрешить defer работать в этом контексте при определенных обстоятельствах, так как есть веские причины для этого; но до тех пор не делайте этого.

Вы, безусловно, никогда будет позволено называть super в вашем defer, однако, как это было бы полностью победить правила порядка, в котором все должно быть сделано во время инициализации. Особая вещь, которую вы пытаетесь сделать, - ужасная идея. Компилятор знает правила инициализации безопасным и последовательным образом; послушайте компилятор.

 Смежные вопросы

  • Нет связанных вопросов^_^