我再也无法想到它了,请帮助我了解这里发生了什么:
所以我有一些我想在UICollecionView中看到的图像资源。 我有一系列图像名称和文件名,因此在 collectionView:cellForItemAtIndexPath:函数中我做了
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在
中定义class ImageCell: UICollectionViewCell {
@IBOutlet weak var imageC: UIImageView!
}
所以我看到 currentImage 正确获取图片。 Println给了我这个:
currentImage <UIImageAsset: 0x7fead1e55790>
但是,cell.imageC?.image是零!为什么?我与选项混淆并没有真正得到包装 - 解包变量和常量的想法,但在这里我做了与TableView教程完全相同的一切。拜托,给我一些线索 - 我陷入困境
答案 0 :(得分:2)
OMG我在viewDidLoad()
中注释掉了self.collectionView!.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
它有效!我不确定为什么,但作为临时解决方案,它对我来说很好。
奇怪的是,如果您尝试创建新的UIViewCollectionController类,这行代码是默认viewDidLoad()方法的一部分
答案 1 :(得分:0)
如果您使用以下内容,它应该有效:
cell.imageC.image = currentImage
在ImageCell类中,您将图像定义为UIImageView!
这个感叹号基本上表示你没有初始化变量,但它会在被引用之前包含一些东西。它不是可选的。
swift中的Optionals使代码更安全。它引入了一个概念,即没有常量或任何包含nil
的变量,它会在访问时引发错误。相反,如果变量中没有任何内容,您可以将其标记为可选。那个可选标志有点像一个布尔值,表示变量中是否有东西。一旦你检查变量是不是nil,然后解开它,你就会得到它的内容。