首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么cell.ImageView?.image是零如果已经传递了一个图像?与斯威夫特中的选项混淆

为什么cell.ImageView?.image是零如果已经传递了一个图像?与斯威夫特中的选项混淆
EN

Stack Overflow用户
提问于 2015-02-04 22:49:47
回答 2查看 1.9K关注 0票数 1

我只是想不起来了,请帮我理解一下这里发生了什么:

因此,我有一个图像资产,我试图在UICollecionView中看到。我有一个图像名和文件名数组,所以在收集器视图中:cellForItemAtIndexPath:函数

代码语言:javascript
复制
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as ImageCell

    let currentPhoto = photos[indexPath.row]
    let currentImage = UIImage(named: currentPhoto.filename)

    cell.imageC?.image = currentImage

    println("collectionView:cellForItemAtIndexPath:\(indexPath.row)")
    println(currentPhoto.filename)

    println("currentImage \(currentImage!.imageAsset)")
    println("cell.image \(cell.imageC?.image)")
    return cell

imageC定义为

代码语言:javascript
复制
class ImageCell: UICollectionViewCell {

@IBOutlet weak var imageC: UIImageView!

}

所以我看到currentImage正确地得到了一个图像。普林给了我这个:

currentImage <UIImageAsset: 0x7fead1e55790>

然而,cell.imageC?.image是零!为什么?我混淆了选项,并没有真正理解包装-解包装变量和常量,但是在这里,我所做的一切都与TableView教程中的完全相同。拜托,给我点线索-我被困在泥里了

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-06 14:52:53

我在viewDidLoad()中注释掉了

代码语言:javascript
复制
self.collectionView!.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier) 

而且起作用了!我不知道为什么,但作为一个临时的解决方案,这对我来说很好。

奇怪的是,如果您尝试创建新的viewDidLoad类,那么这行代码是默认UIViewCollectionController ()方法的一部分

票数 2
EN

Stack Overflow用户

发布于 2015-02-04 23:17:59

如果您使用以下内容,它应该可以工作:

代码语言:javascript
复制
cell.imageC.image = currentImage

在您的ImageCell类中,您将图像定义为一个感叹号( UIImageView! ),该感叹号基本上表示您没有初始化变量,但它在被引用之前将包含一些内容。这不是可选的。

快速选项存在,以使代码更安全。它引入了一个概念,即没有常量或任何变量包含nil,因为它将在访问时抛出一个错误。相反,如果有可能变量中没有任何内容,则可以将其标记为可选。这个可选的标志有点像一个布尔值,它表示变量中是否有什么东西。一旦您检查变量是否为零,然后展开它,您将得到它的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28333083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档