How to take photo and save it at the same time (swift3)

Right now my code has 1 view, 1 button, and 1 image view. Currently the code takes the photo and places on the uniimageview. How can I write the code so that every time the photo is snap it will be saved to the photo gallery. I have already updated the plist settings.

   import UIKit
    import AVFoundation

    class ViewController: UIViewController,AVCapturePhotoCaptureDelegate  {

     var captureSesssion : AVCaptureSession!
   var cameraOutput : AVCapturePhotoOutput!
   var previewLayer : AVCaptureVideoPreviewLayer!

   @IBOutlet weak var capturedImage: UIImageView!
    @IBOutlet weak var previewView: UIView!

  override func viewDidLoad() {
captureSesssion = AVCaptureSession()
captureSesssion.sessionPreset = AVCaptureSessionPresetPhoto
cameraOutput = AVCapturePhotoOutput()

let device = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)

if let input = try? AVCaptureDeviceInput(device: device) {
    if (captureSesssion.canAddInput(input)) {
        if (captureSesssion.canAddOutput(cameraOutput)) {
            previewLayer = AVCaptureVideoPreviewLayer(session: captureSesssion)
            previewLayer.frame = previewView.bounds
    } else {
        print("issue here : captureSesssion.canAddInput")
} else {
    print("some problem here")

    // Take picture button
   @IBAction func didPressTakePhoto(_ sender: UIButton) {
let settings = AVCapturePhotoSettings()
let previewPixelType = settings.availablePreviewPhotoPixelFormatTypes.first!
let previewFormat = [
    kCVPixelBufferPixelFormatTypeKey as String: previewPixelType,
    kCVPixelBufferWidthKey as String: 160,
    kCVPixelBufferHeightKey as String: 160
settings.previewPhotoFormat = previewFormat
cameraOutput.capturePhoto(with: settings, delegate: self)


  // callBack from take picture
    func capture(_ captureOutput: AVCapturePhotoOutput,  didFinishProcessingPhotoSampleBuffer photoSampleBuffer: CMSampleBuffer?,  previewPhotoSampleBuffer: CMSampleBuffer?, resolvedSettings:  AVCaptureResolvedPhotoSettings, bracketSettings:   AVCaptureBracketedStillImageSettings?, error: Error?) {

if let error = error {
    print("error occure : \(error.localizedDescription)")

if  let sampleBuffer = photoSampleBuffer,
    let previewBuffer = previewPhotoSampleBuffer,
    let dataImage =  AVCapturePhotoOutput.jpegPhotoDataRepresentation(forJPEGSampleBuffer:  sampleBuffer, previewPhotoSampleBuffer: previewBuffer) {
    print(UIImage(data: dataImage)?.size as Any)

    let dataProvider = CGDataProvider(data: dataImage as CFData)
    let cgImageRef: CGImage! = CGImage(jpegDataProviderSource: dataProvider!, decode: nil, shouldInterpolate: true, intent: .defaultIntent)
    let image = UIImage(cgImage: cgImageRef, scale: 1.0, orientation: UIImageOrientation.right)

    self.capturedImage.image = image
} else {
    print("some error here")

    // This method you can use somewhere you need to know camera permission   state
    func askPermission() {
let cameraPermissionStatus =  AVCaptureDevice.authorizationStatus(forMediaType: AVMediaTypeVideo)

switch cameraPermissionStatus {
case .authorized:
    print("Already Authorized")
case .denied:

    let alert = UIAlertController(title: "Sorry :(" , message: "But  could you please grant permission for camera within device settings",  preferredStyle: .alert)
    let action = UIAlertAction(title: "Ok", style: .cancel,  handler: nil)
    present(alert, animated: true, completion: nil)

case .restricted:
    AVCaptureDevice.requestAccess(forMediaType: AVMediaTypeVideo, completionHandler: {
        [weak self]
        (granted :Bool) -> Void in

        if granted == true {
            // User granted
            print("User granted")
                //Do smth that you need in main thread   
        else {
            // User Rejected
            print("User Rejected")

                let alert = UIAlertController(title: "WHY?" , message:  "Camera it is the main feature of our application", preferredStyle: .alert)
                let action = UIAlertAction(title: "Ok", style: .cancel, handler: nil)
                self?.present(alert, animated: true, completion: nil)