Swift: 'super.init' не вызывается на всех путях до возврата из инициализатора? - PullRequest
0 голосов
/ 25 ноября 2018

Я получаю эту ошибку на последней скобке инициата в моем классе.Класс выглядит примерно так (я продаю место, где происходит ошибка):

class RecordingViewController: UIViewController, AVCaptureFileOutputRecordingDelegate {

    let cameraButton:UIButton?
    let camPreview:UIView?

    init (cameraButton: UIButton!, camPreview: UIView!) {
        self.cameraButton = cameraButton
        self.camPreview = camPreview

    } //get error here

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    //do a bunch of other stuff
}

Я искал здесь и здесь для решения, но оба кажутсякак решения, которые либо очень плохие, либо слишком специфичные для этого вопроса, поэтому они не работают для меня.

Я надеялся, что решение моей проблемы будет сделано таким образом, чтобы это помогло мне понятьпочему эта ошибка происходит.

1 Ответ

0 голосов
/ 25 ноября 2018

Поскольку вы наследуете от UIViewController, вы должны вызывать super.init сразу после установки переменных в вашей init функции

Когда вы наследуете класс и реализуете новую функцию init или переопределяете свою собственную функцию initВы должны (почти) всегда вызывать super.init.Давайте возьмем ваш пример, который вы унаследовали от UIViewController.UIViewController имеет несколько функций инициализации, которые вы можете использовать для инициализации контроллера представления.если вы не вызовете super.init, весь код внутри этих функций не будет вызван, и, возможно, контроллер представления не будет инициализирован.

В любом случае, этот фрагмент кода должен работать для вас:

class ViewController: UIViewController {

    var button: UIButton?

    init(button: UIButton) {
        self.button = button
        super.init(nibName: nil, bundle: nil)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...