Ios 与Singleton的AVCaptureSession。如何管理?

Ios 与Singleton的AVCaptureSession。如何管理?,ios,swift,singleton,avfoundation,avcapturesession,Ios,Swift,Singleton,Avfoundation,Avcapturesession,伙计们,由于我有多个视图和一些缩放按钮,我需要它们来更改预览相机输出,我认为使用Singleton进行会话初始化是正确的,但我不知道如何做,也找不到任何好的信息,有人能帮我吗?更新 好的,所以,我设法写了它,我不知道它是否正常,下面是代码: protocol Singleton: class { static var sharedInstance: Self { get } } final class AVFSessionSingleton: Singleton { static let s

伙计们,由于我有多个视图和一些缩放按钮,我需要它们来更改预览相机输出,我认为使用Singleton进行会话初始化是正确的,但我不知道如何做,也找不到任何好的信息,有人能帮我吗?

更新

好的,所以,我设法写了它,我不知道它是否正常,下面是代码:

protocol Singleton: class {
static var sharedInstance: Self { get }
}


final class AVFSessionSingleton: Singleton {
static let sharedInstance = AVFSessionSingleton()
private init() {
    session = newVideoCaptureSession()!
}


var session: AVCaptureSession!
var imageOutput : AVCaptureStillImageOutput?

//FUNCTION

func newVideoCaptureSession () -> AVCaptureSession? {

    func initCaptureDevice() -> AVCaptureDevice? {
        var captureDevice: AVCaptureDevice?
        let devices: NSArray = AVCaptureDevice.devices() as NSArray

        for device: Any in devices {
            if (device as AnyObject).position == AVCaptureDevicePosition.back {
                captureDevice = device as? AVCaptureDevice
            }
        }
        print("device inited")
        return captureDevice
    }

    func initOutput() {
        self.imageOutput = AVCaptureStillImageOutput()
    }

    func initInputDevice(captureDevice : AVCaptureDevice) -> AVCaptureInput? {
        var deviceInput : AVCaptureInput?
        do {
            deviceInput = try AVCaptureDeviceInput(device: captureDevice)
        }
        catch _ {
            deviceInput = nil
        }
        return deviceInput
    }

    func initSession(deviceInput: AVCaptureInput) {
        self.session = AVCaptureSession()
        self.session?.sessionPreset = AVCaptureSessionPresetPhoto
        self.session?.addInput(deviceInput)
        self.session?.addOutput(self.imageOutput!)
    }

    return session
 }

}

所以现在我想用这种方式来调用它,我可以管理预览的布局,有什么建议吗?…

更新

好的,所以,我设法写了它,我不知道它是否正常,下面是代码:

protocol Singleton: class {
static var sharedInstance: Self { get }
}


final class AVFSessionSingleton: Singleton {
static let sharedInstance = AVFSessionSingleton()
private init() {
    session = newVideoCaptureSession()!
}


var session: AVCaptureSession!
var imageOutput : AVCaptureStillImageOutput?

//FUNCTION

func newVideoCaptureSession () -> AVCaptureSession? {

    func initCaptureDevice() -> AVCaptureDevice? {
        var captureDevice: AVCaptureDevice?
        let devices: NSArray = AVCaptureDevice.devices() as NSArray

        for device: Any in devices {
            if (device as AnyObject).position == AVCaptureDevicePosition.back {
                captureDevice = device as? AVCaptureDevice
            }
        }
        print("device inited")
        return captureDevice
    }

    func initOutput() {
        self.imageOutput = AVCaptureStillImageOutput()
    }

    func initInputDevice(captureDevice : AVCaptureDevice) -> AVCaptureInput? {
        var deviceInput : AVCaptureInput?
        do {
            deviceInput = try AVCaptureDeviceInput(device: captureDevice)
        }
        catch _ {
            deviceInput = nil
        }
        return deviceInput
    }

    func initSession(deviceInput: AVCaptureInput) {
        self.session = AVCaptureSession()
        self.session?.sessionPreset = AVCaptureSessionPresetPhoto
        self.session?.addInput(deviceInput)
        self.session?.addOutput(self.imageOutput!)
    }

    return session
 }

}

所以现在我想用这种方式来调用它,我可以管理预览的布局,有什么建议吗?…

用singleton创建一个类,并拥有AVCaptureSession的属性。您甚至可以使用它来创建singleton。使用singleton创建一个类,并拥有AVCaptureSession的属性。您甚至可以使用它来创建singleton。