UIViewController里面的init从未调用过

时间:2017-03-11 04:45:03

标签: swift

我想在视图控制器中使用init来初始化一些属性。我已经尝试创建一个默认的init并覆盖UIViewController中的现有值,并且所有内容都会编译而不会出错,但是没有一个被调用。那是为什么?

这些是我当前的内容,没有一个被称为。

init(){
    cameraSession = AVCaptureSession()
    cameraSession.sessionPreset = AVCaptureSessionPresetLow
    captureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) as AVCaptureDevice

    super.init(nibName: nil, bundle: nil)
}

override init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: Bundle!) {
    cameraSession = AVCaptureSession()
    cameraSession.sessionPreset = AVCaptureSessionPresetLow
    captureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) as AVCaptureDevice
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}

required init?(coder aDecoder: NSCoder) {
    cameraSession = AVCaptureSession()
    cameraSession.sessionPreset = AVCaptureSessionPresetLow
    captureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) as AVCaptureDevice

    super.init(coder: aDecoder)
}

2 个答案:

答案 0 :(得分:2)

这取决于您创建视图控制器对象的方式。

如果您使用的是storyboard或xib,则会调用此方法

required init?(coder aDecoder: NSCoder) {

}

答案 1 :(得分:0)

尝试使用设计和调用模式(请参阅http://www.apeth.com/swiftBook/ch02.html#SECdefineandcallhttp://www.apeth.com/swiftBook/ch03.html#_computed_initializer)使用默认值初始化属性,而不是使用初始化器,如下所示:

class ViewController {
    var cameraSession: AVCaptureSession = {
        let session = AVCaptureSession()
        session.sessionPreset = AVCaptureSessionPresetLow
        return session
    }()

    var captureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) as AVCaptureDevice
}

然后根本不需要初始化器!