簡體   English   中英

'UIImage的?'在swift 4中無法轉換為“UIImage”問題

[英]'UIImage?' is not convertible to 'UIImage' issue in swift 4

我正在嘗試實現一個圖像選擇器。 在委托方法中,我收到以下錯誤。

在此輸入圖像描述

要么

在此輸入圖像描述

我寫道,這是代碼

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    var image = info[.editedImage] as? UIImage
    if image == nil {
        image = info[.originalImage] as? UIImage
    }

    simpleImagePicker!.dismiss(animated: true)
}

我嘗試使用Swift 5,它沒有錯誤地工作。 但問題在於Swift 4。

怎么解決這個? 它有什么解決方案嗎?

UIImagePickerControllerDelegate簽名對於不同的Swift版本是不同的。 您使用的是Swift 4.2及更高版本的方法,它與Swift 4.0大不相同。

Swift 4.0:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let editedImage = info[UIImagePickerControllerEditedImage] as? UIImage {

    } else if let originalimage = info[UIImagePickerControllerOriginalImage] as? UIImage {

    }
}

Swift 4.2和Swift 5:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {

    } else if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {

    } else {
        print("Something went wrong")
    }
}

所以,檢查正確的swift版本並遵循正確的方法!

我嘗試使用Swift 5,它沒有錯誤地工作。 但問題在於Swift 4。

首先,如果你正在使用Xcode 10.x我強烈建議你執行Swift 5更新。 忘記Swift 4並保持更新。

其次,這是Swift 5上正確的UIImagePickerControllerDelegate實現:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
        // do stuff with your original image...

    } else if let image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
        // do something with your edited image...
    }
    dismiss(animated: true, completion: nil)
}


無論如何,如果你想堅持使用Swift 4 ,這是要使用的ImagePicker委托函數:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        if let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage {
            // do stuff with your image
        } else if let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage {
            // do stuff with your image
        }
        dismiss(animated:true, completion: nil)
}

主要問題是Swift 4中沒有UIImagePickerController.InfoKey。編譯器無法定義此類型,導致錯誤如果您使用[String:Any]字典對swift 4使用正確的簽名,則錯誤將消失

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM