Ios 使用swift的XCode 6 beta 7错误

Ios 使用swift的XCode 6 beta 7错误,ios,xcode,swift,Ios,Xcode,Swift,以前的版本是beta 6,我的项目运行良好。我刚刚将我的xcode更新到版本6 beta 7,出现了错误,真的不知道如何修复它 var currentcell = collectionView.cellForItemAtIndexPath(indexPath) var posx = currentcell.frame.origin.x-collectionView.contentOffset.x 错误报告:“UICollectionViewCell?”没有名为“frame”的成员 Xcode

以前的版本是beta 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”的值未展开;你想用“!”吗还是“?”? 有人能帮忙吗?

试试这个:

if currentcell != nil
{
    var posx = currentcell!.frame.origin.x-collectionView.contentOffset.x
}

这是正确的。在中使用

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

currentCell
nil
时,您希望
posX
是什么

您可能要做的是强制展开单元格值:

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

在较旧的Beta中,大多数obj-c类型都是显式展开的选项(
UITableViewCell!
),但其中一些被制成纯选项(
UITableViewCell?
)。请注意,在某些情况下,
currentCell
nil
。您应该处理这些情况。

为避免在没有返回给定索引的单元格时发生运行时崩溃,请执行以下操作:

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
}

我没有?一开始,但是xcode 6 beta 7建议我添加?在那之后。@TomSawyer您可能想使用
。在较旧的Beta中,大多数obj-c类型都是显式展开的选项(
UITableViewCell!
),但其中一些被制成纯选项(
UITableViewCell?
)。这可能造成了不同。许多TK,它现在工作后添加!后电流单元