override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
if let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as? PictureCellForHomeVC {
picArray[indexPath.row].getDataInBackgroundWithBlock({ (data: NSData?, error: NSError?) in
if error == nil {
if let data = data {
let image = UIImage(data: data)
cell.imageView.image = image
return cell
}
}
})
}else {
return UICollectionViewCell()
}
}
在上面的代码中,我收到错误:
Unexpected Non Void return value in void function
上面代码中的picArray
是包含PFFile
个对象的代码,我可以将其称为getDataInBackgroundWithBlock
方法。
我理解错误意味着什么,因为getDataInBackgroundWithBlock
的completionHandler返回void
所以我无法返回我的单元格,但我仍然坚持如何解决这个问题。< / p>
我甚至无法将单独的闭包传递给方法cellForItemAtIndexPath
,因为我没有调用该方法,而且它是一种数据源方法。有谁知道如何解决这个问题?
答案 0 :(得分:1)
你试图返回你认为在你的函数中返回的东西,但实际上是试图从getDataInBackgroundWithBlock
返回一些应该返回void
的东西(这是不允许的,因此错误)
您可以执行类似这样的操作,在此期间加载图像,同时为其添加占位符图像(以增加效果):
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
if let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as? PictureCellForHomeVC {
picArray[indexPath.row].getDataInBackgroundWithBlock({ (data: NSData?, error: NSError?) in
if error == nil {
self.loadImage(inImageView: cell.imageView, withData: data)
}
})
return cell
} else {
return UICollectionViewCell()
}
func loadImage(inImageView imageView: PFImageView, withData imageFile: PFFile?) {
imageView.image = UIImage(named: "placeholder.png") // Some placeholder while the image loads asyncronously
if let imageFile = imageFile {
imageView.file = imageFile
imageView.loadInBackground(nil)
}
}