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() {
super.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)) {
        captureSesssion.addInput(input)
        if (captureSesssion.canAddOutput(cameraOutput)) {
            captureSesssion.addOutput(cameraOutput)
            previewLayer = AVCaptureVideoPreviewLayer(session: captureSesssion)
            previewLayer.frame = previewView.bounds
            previewView.layer.addSublayer(previewLayer)
            captureSesssion.startRunning()
        }
    } 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() {
print("here")
let cameraPermissionStatus =  AVCaptureDevice.authorizationStatus(forMediaType: AVMediaTypeVideo)

switch cameraPermissionStatus {
case .authorized:
    print("Already Authorized")
case .denied:
    print("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)
    alert.addAction(action)
    present(alert, animated: true, completion: nil)

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

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

            DispatchQueue.main.async(){
                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)
                alert.addAction(action)
                self?.present(alert, animated: true, completion: nil)  
            } 
        }
    });
}}}