XCode 6 beta 7错误与swift

时间:2014-09-04 12:13:03

标签: ios xcode swift

以前的版本是测试版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?'的值没有打开;你的意思是用'!'要么 '?'? 有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

这是对的。在

中使用?

currentcell?.frame.origin.x使整个表达式成为可选项(CGFloat?)。您不能对选项进行算术运算。你必须先打开这个值。

posX currentCell时您期望nil是什么?

您可能想要做的是强行解开单元格值:

var posX = currentcell!.frame.origin.x - collectionView.contentOffset.x

在较旧的测试版中,大多数obj-c类型是明确展开的选项(UITableViewCell!),但其中一些是纯粹的选项(UITableViewCell?)。请注意,有些情况currentCellnil。你应该处理这些案件。

答案 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
}