我想在视图控制器中使用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)
}
答案 0 :(得分:2)
这取决于您创建视图控制器对象的方式。
如果您使用的是storyboard或xib,则会调用此方法
required init?(coder aDecoder: NSCoder) {
}
答案 1 :(得分:0)
尝试使用设计和调用模式(请参阅http://www.apeth.com/swiftBook/ch02.html#SECdefineandcall和http://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
}
然后根本不需要初始化器!