从字符串数据类型到图像的图像转换

Image conversion from string data type to Image

我正在尝试将来自 table 视图单元格的图像显示到另一个控制器。我正在使用 table 视图单元格来显示图像、标题和其他属性。当用户单击 table 单元格时,我想将用户重定向到另一个控制器并显示这些属性。我正在尝试访问已定义的方法,但 我收到以下错误 无法将类型 'Data?' 的值分配给 didSelectRow 函数中的类型 'UIImage?'。 T数据来自 API。这是 JSON 结构。

import Foundation

struct Movie: Decodable {
    let originalTitle: String
    let overview: String
    let posterPath: String
    
    enum CodingKeys: String, CodingKey {
        case originalTitle = "original_title"
        case overview
        case posterPath = "poster_path"
    }
    
}

这是我定义的用于检索这些值的方法。

   func getTitle(by row: Int) -> String? {
        return movies[row].originalTitle
    }
    
    func getOverview(by row: Int) -> String? {
        return movies[row].overview
    }
    
    func getImageData(by row: Int) -> Data? {
        return cache[row]
    }

这是我将数据转换为图像的单元格属性。

class MovieViewCell: UITableViewCell {
    
    static let identifier = "MovieViewCell"
    

    @IBOutlet weak var movieImage: UIImageView!
    @IBOutlet weak var movieTitle: UILabel!
    @IBOutlet weak var movieOverview: UILabel!
    
    func configureCell(title: String?, overview: String?, data: Data?) {
        
        movieTitle.text = title
        movieOverview.text = overview
        
        if let imageData = data{
            movieImage.image = UIImage(data: imageData)
        }
    }
    
}

这里是 didSelectRow 函数。

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let dc = storyboard?.instantiateViewController(withIdentifier: "MovieDeatilsViewController") as! MovieDeatilsViewController
        
        let row = indexPath.row
       dc.titlemovie = presenter.getTitle(by: row) ?? ""
       dc.overview = presenter.getOverview(by: row) ?? ""
      dc.imagemovie = presenter.getImageData(by: row)
      
        self.navigationController?.pushViewController(dc, animated: true)
   }
    
    
}

这是我要显示详细信息的详细信息视图控制器代码。

class MovieDeatilsViewController: UIViewController {
    
    
    @IBOutlet weak var movieImage: UIImageView!
    
    @IBOutlet weak var movieTitle: UILabel!
    
    @IBOutlet weak var movieOverview: UILabel!
    
    
    var titlemovie = ""
    var overview = ""
    var imagemovie :UIImage?
    
    override func viewDidLoad() {
        super.viewDidLoad()

        movieTitle.text = titlemovie
        movieOverview.text = overview
        movieImage.image = imagemovie
        
    
        
    }

}

错误截图如下。

如果您查看 getImageData: 的方法签名,您会发现它 returns Data?。相反,您的 imagemovie 属性 期待 UIImage?。看看问题出在哪里?

func getImageData(by row: Int) -> Data? {

var imagemovie :UIImage?

不是将 Data? 类型的值分配给 imagemovie 属性,而是首先必须将 Data? 转换为 UIImage?,如下所示:

dc.imagemovie = UIImage(data: presenter.getImageData(by: row)!)