无法转换类型“[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]?”的值到预期的参数类型“字符串?”快速显示结构中的图像时
无法转换类型“(_)-> Void?”的值到预期的参数类型'(() - > Void)?
无法转换“CGPoint!”类型的值到预期的参数类型'UnsafeMutablePointer<CGPoint>'