Я слежу за видео Дэвида Торна, чтобы пользователи могли делать снимки с помощью камеры или импортировать их из своей фото-библиотеки или фотоальбомов.
https://www.youtube.com/watch?v=wDzk5KDe6Uw
Я следовал за гидом за символом, и меня поразили ошибки на изображении ниже. Я сравнил свой код с кодом в Github для учебника, и я не могу найти разрешение.
Вот снимок экрана с ошибками (недостаточно репутации для вставки в сообщение)
Ошибки
1! Значение типа ViewController не имеет члена selectedImage
2! nil нельзя присвоить типу '(UIImagePickerController, [UIImagePickerController.InfoKey: Any]) -> ()'
2! 'nil' нельзя назначить типу '(UIImagePickerController, [UIImagePickerController.InfoKey: Any]) -> ()'
.swift-файл имеет тип UIViewController.
Вот мой код вошел;
public var imagePickerController: UIImagePickerController?
public var defaultImageUrl: URL?
internal var selectedImage: UIImage? {
get {
return self.selectedImageView.image
}
set {
switch newValue {
case nil:
self.selectedImageView.image = nil
self.selectImageButton.isEnabled = true
self.selectImageButton.alpha = 1
self.removeImageButton.isEnabled = false
self.removeImageButton.alpha = 0.5
default:
self.selectedImageView.image = newValue
self.selectImageButton.isEnabled = false
self.selectImageButton.alpha = 0.5
self.removeImageButton.isEnabled = true
self.removeImageButton.alpha = 1
}
}
}
//This outlet, 'selectedImageContainer' was guessed from observing the tutorial stacked their UIImageView in a UIView.
@IBOutlet weak var selectedImageContainer: UIView!
@IBOutlet weak var selectedImageView: UIImageView!
@IBOutlet weak var selectImageButton: UIButton! {
didSet {
guard let button = self.selectImageButton else { return }
button.isEnabled = true
button.alpha = 1
}
}
@IBOutlet weak var removeImageButton: UIButton! {
didSet {
guard let button = self.removeImageButton else { return }
button.isEnabled = false
button.alpha = 0.5
}
override func viewDidLoad() {
super.viewDidLoad()
self.selectedImageView.contentMode = .scaleAspectFit
self.selectImageButton.isEnabled = self.selectedImage == nil
self.selectImageButton.alpha = 1
}
@IBAction func selectImageButtonAction(_ sender: Any) {
if self.imagePickerController != nil {
self.imagePickerController?.delegate = nil
self.imagePickerController = nil
}
self.imagePickerController = UIImagePickerController.init()
let alert = UIAlertController.init(title: "Select Source Type", message: nil, preferredStyle: .actionSheet)
if UIImagePickerController.isSourceTypeAvailable(.camera) {
alert.addAction(UIAlertAction.init(title: "Camera", style: .default, handler: { (_) in
self.presentImagePicker(controller: self.imagePickerController!, source: .camera)
}))
}
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
alert.addAction(UIAlertAction.init(title: "Photo Library", style: .default, handler: { (_) in
self.presentImagePicker(controller: self.imagePickerController!, source: .photoLibrary)
}))
}
if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum) {
alert.addAction(UIAlertAction.init(title: "Saved Albums", style: .default, handler: { (_) in
self.presentImagePicker(controller: self.imagePickerController!, source: .savedPhotosAlbum)
}))
}
alert.addAction(UIAlertAction.init(title: "Cancel", style: .cancel))
self.present(alert, animated: true)
}
internal func presentImagePicker(controller: UIImagePickerController , source: UIImagePickerController.SourceType) {
controller.delegate = self
controller.sourceType = source
self.present (controller, animated: true)
}
@IBAction func removeImageButtonAction(_ sender: UIButton) {
self.selectedImage = nil
}
}
extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
guard let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage else {
return self.imagePickerControllerDidCancel(picker)
}
self.selectedImage = image
picker.dismiss(animated: true) {
picker.delegate = nil
self.imagePickerController = nil
}
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true) {
picker.delegate = nil
self.imagePickerController = nil
}
}
}