无法转换类型“[String]?”的值到预期的参数类型“字符串?”快速显示结构中的图像时

Posted

技术标签:

【中文标题】无法转换类型“[String]?”的值到预期的参数类型“字符串?”快速显示结构中的图像时【英文标题】:Cannot convert value of type '[String]?' to expected argument type 'String?' when displaying images from a struct in swift 【发布时间】:2020-08-30 09:33:20 【问题描述】:

我正在 swift 中开发一个显示图像的应用程序(就像 YouTube 缩略图一样),一旦单击,就会将您发送到带有“子帖子”的视图控制器,这些图像是多个图像,逐步解释如何完成某事(使用图像)。我已经完成了缩略图功能,一旦您单击缩略图,它就会将您发送到“子帖子”视图。现在我必须将所有“子帖子”添加到collectionview。我似乎无法弄清楚,因为我使用struct 而不是class 子帖子,因为我在上传时保存子帖子。可能会令人困惑。如果不清楚,请告诉我,我会进一步解释。这就是我想出的:

struct SubPost: Decodable 
    var pathToImage: [String]?
    var postID: String!
    var userID: String!

    init(pathToImage: [String]? = nil, postID: String? = nil, userID: String? = nil) 
        self.pathToImage = pathToImage
        self.postID = postID
        self.userID = userID
    


func fetchSubPosts() 
    ref.child("subposts").queryOrderedByKey().observeSingleEvent(of: .value, with:  (snapshot) in
        let subpostsSnap = snapshot.value as! [String : AnyObject]
        for (_,subpost) in subpostsSnap 
            if let postID = subpost["postID"] as? String 
                var subposst = SubPost(pathToImage: subpost["pathToImage"] as? [String])
                if let userID = subpost["userID"] as? String 
                    subposst.postID = postID
                    subposst.userID = userID
                
                self.subposts.append(subposst)
            
            self.collectionview.reloadData()

        
    )
    ref.removeAllObservers()

这是collectionView 函数:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "subPostCell", for: indexPath) as! SubPostCell

    cell.subPostImage.downloadImage(from: self.subposts[indexPath.row].pathToImage)

    return cell
    


行中有错误:

cell.subPostImage.downloadImage(from: self.subposts[indexPath.row].pathToImage) 错误:

无法转换类型“[String]?”的值到预期的参数类型“字符串?”

似乎无法弄清楚这一点。非常感谢任何形式的帮助! 提前致谢!

【问题讨论】:

【参考方案1】:

您声明为可选字符串数组pathToImage: [String]?,但随后尝试将其视为可选字符串。那是行不通的,这是错误消息指出的。

您需要在代码中指明要传递给downloadImage 的数组中的哪个字符串。例如:

cell.subPostImage.downloadImage(from: self.subposts[indexPath.row].pathToImage![0])

【讨论】:

奇怪的是没有显示任何图像。这可能是什么?我应该显示任何特定文件或类似的东西吗? 如果错误消息消失,您正在处理一个新问题。我建议在调试器中单步执行代码,并检查每个变量以查看它们的值是否与您的预期匹配。 我猜你是对的,我不能真正让它在我的项目上工作,因为还有另一件事阻止它工作。我会投票并标记为正确,因为答案是正确的。但你知道,我的问题还没有解决。

以上是关于无法转换类型“[String]?”的值到预期的参数类型“字符串?”快速显示结构中的图像时的主要内容,如果未能解决你的问题,请参考以下文章

无法转换类型“[String]?”的值到预期的参数类型“字符串?”快速显示结构中的图像时

无法转换“Foo!”类型的值到预期的参数类型'Foo!'

无法转换类型“(_)-> Void?”的值到预期的参数类型'(() - > Void)?

无法转换“CGPoint!”类型的值到预期的参数类型'UnsafeMutablePointer<CGPoint>'

无法转换类型“Meme!”的值到预期的参数类型'@noescape (Meme) throws -> Bool'

无法将类型“[String : String]”的值转换为预期的参数类型“HTTPHeaders?”