以前的版本是测试版6,我的项目运行良好。我刚刚将我的xcode更新到版本6 beta 7并且收到错误,真的不知道如何解决它。
var currentcell = collectionView.cellForItemAtIndexPath(indexPath)
var posx = currentcell.frame.origin.x-collectionView.contentOffset.x
错误报告:'UICollectionViewCell?'没有名为'frame'的成员 Xcode 6 beta 7建议我添加?在当前细胞之后。 我改成了
var posx = currentcell?.frame.origin.x-collectionView.contentOffset.x
但仍然是错误:错误报告:可选类型'CGFloat?'的值没有打开;你的意思是用'!'要么 '?'? 有人可以帮忙吗?
答案 0 :(得分:3)
这是对的。在
中使用?
currentcell?.frame.origin.x
使整个表达式成为可选项(CGFloat?
)。您不能对选项进行算术运算。你必须先打开这个值。
posX
currentCell
时您期望nil
是什么?
您可能想要做的是强行解开单元格值:
var posX = currentcell!.frame.origin.x - collectionView.contentOffset.x
在较旧的测试版中,大多数obj-c类型是明确展开的选项(UITableViewCell!
),但其中一些是纯粹的选项(UITableViewCell?
)。请注意,有些情况currentCell
为nil
。你应该处理这些案件。
答案 1 :(得分:1)
为了避免在给定indexPath没有返回单元格时运行时崩溃:
if let currentcell = collectionView.cellForItemAtIndexPath(indexPath) {
var posX = currentcell.frame.origin.x - collectionView.contentOffset.x
// .. do something
}
else {
// ... there was no cell so do something else
}
答案 2 :(得分:0)
试试这个:
if currentcell != nil
{
var posx = currentcell!.frame.origin.x-collectionView.contentOffset.x
}