OriharaMusic
OriharaMusic

Reputation: 1

Use of unresolved identifier 'image'

I have a slight problem. I'm trying to make a camera in Swift Xcode, however, I've run into one problem and that is that "ImagePicked.image = image" keeps showing error. I have no idea why it does this. Photo of the interface of the app

import UIKit

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    @IBOutlet weak var ImagePicked: UIImageView!

    @IBAction func openCamera(_ sender: Any) {
        if UIImagePickerController.isSourceTypeAvailable(.camera) { //Is the camera an available source type?
            let imagePicker = UIImagePickerController() //Declare variable imagePicker
            imagePicker.delegate = self
            imagePicker.sourceType = .camera;
            imagePicker.allowsEditing = false //Tell Image Pickr not to edit camptured photo
            self.present(imagePicker, animated: true, completion: nil) //Show the photo to the user
        }
        func openLibrary(_ sender: Any) {
            if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { //Check if device has access to photo library
                let imagePicker = UIImagePickerController() //Set up variable imagePicker
                imagePicker.delegate = self
                imagePicker.sourceType = .photoLibrary; //Set the source type to library
                imagePicker.allowsEditing = true //Allow editing, so the user can move and crop their photo
                self.present(imagePicker, animated: true, completion: nil) //Show UIImagePickerController to the user
            }
        }
        func saveImage(_ sender: Any) {
            let ImageData = ImagePicked.image!.jpegData(compressionQuality: 0.6)
            let compressedJPGImage = UIImage(data: ImageData!)
            UIImageWriteToSavedPhotosAlbum(compressedJPGImage!, nil, nil, nil)
            let alertController = UIAlertController(title: "Complete", message: "Your image has been saved.", preferredStyle: .alert)
            let okAction = UIAlertAction(title: "OK", style: .default); alertController.addAction(okAction); self.present(alertController, animated: true, completion: nil)
        }
        func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
            guard (info[.originalImage] as? UIImage) != nil else {
                fatalError ("Expected a dictionary containtaining an image, but was provided with the following: \(info)")
                ImagePicked.image = image //PROBLEM
                dismiss(animated: true, completion: nil)
            }
        }

        func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
        }
    }
}

Upvotes: 0

Views: 508

Answers (1)

Kamran
Kamran

Reputation: 15238

Update didFinishPickingMediaWithInfo as below,

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
      guard let image = info[.originalImage] as? UIImage else { return }
      ImagePicked.image = image
      picker.dismiss(animated: true, completion: nil)
}

As @rmaddy commented, you should rearrange the methods as below,

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    @IBOutlet weak var ImagePicked: UIImageView!

    @IBAction func openCamera(_ sender: Any) {
        if UIImagePickerController.isSourceTypeAvailable(.camera) { //Is the camera an available source type?
            let imagePicker = UIImagePickerController() //Declare variable imagePicker
            imagePicker.delegate = self
            imagePicker.sourceType = .camera;
            imagePicker.allowsEditing = false //Tell Image Pickr not to edit camptured photo
            self.present(imagePicker, animated: true, completion: nil) //Show the photo to the user
        }
    }
   func openLibrary(_ sender: Any) {
            if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { //Check if device has access to photo library
                let imagePicker = UIImagePickerController() //Set up variable imagePicker
                imagePicker.delegate = self
                imagePicker.sourceType = .photoLibrary; //Set the source type to library
                imagePicker.allowsEditing = true //Allow editing, so the user can move and crop their photo
                self.present(imagePicker, animated: true, completion: nil) //Show UIImagePickerController to the user
            }
        }
   func saveImage(_ sender: Any) {
            let ImageData = ImagePicked.image!.jpegData(compressionQuality: 0.6)
            let compressedJPGImage = UIImage(data: ImageData!)
            UIImageWriteToSavedPhotosAlbum(compressedJPGImage!, nil, nil, nil)
            let alertController = UIAlertController(title: "Complete", message: "Your image has been saved.", preferredStyle: .alert)
            let okAction = UIAlertAction(title: "OK", style: .default); alertController.addAction(okAction); self.present(alertController, animated: true, completion: nil)
        }

  func viewDidLoad() {
       super.viewDidLoad()
       // Do any additional setup after loading the view, typically from a nib.
   }
}

Upvotes: 2

Related Questions