2014-09-04 91 views
2

以前的版本是beta 6,我的項目工作正常。我只是更新了我的xcode到版本6測試版7並且出現錯誤,真的不知道如何解決它。Swift的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

這是正確的。在

中使用 ?

currentcell?.frame.origin.x使整個表達式成爲可選(CGFloat?)。你不能對可選項進行算術運算。你必須首先打開這個值。

你認爲posX是什麼時候currentCellnil

也許你想要做的就是給力展開單元格的值:

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

在較早的beta大部分OBJ-C類型的人明確地展開自選(UITableViewCell!),但其中一些被製作成純可選項(UITableViewCell?)。請注意,有些情況下currentCellnil。你應該處理這些情況。

+0

我沒有?在一開始,但Xcode 6測試版7建議我添加?之後。 – TomSawyer 2014-09-04 12:21:25

+0

@TomSawyer可能你想使用'!'。在較早的beta版本中,大多數obj-c類型都是明確的解包選項('UITableViewCell!'),但其中一些被製成純選項('UITableViewCell?')。這可能導致了差異。 – Sulthan 2014-09-04 12:24:40

+0

很多tks,它的工作後現在添加!當前電池後 – TomSawyer 2014-09-04 12:26:14

0

試試這個:

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

使用未解決的標識符「currentCell」的。不同的錯誤 – TomSawyer 2014-09-04 12:22:24

+0

嘗試self.currentCell – 2014-09-04 12:23:20

+0

我剛剛編輯來解決編譯時的錯誤。 – 2014-09-05 11:17:59

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 
} 
相關問題