2015-07-10 53 views
-1

间距我试图this Objective-C的答案转换为斯威夫特,但它总是在这条线崩溃:UICollectionViewLayout项目与斯威夫特

var previousLayoutAttributes: UICollectionViewLayoutAttributes = attributesToReturn[i - 1] 

这是函数:

override func layoutAttributesForElementsInRect(rect: CGRect) -> [AnyObject]? { 

    var attributesToReturn:[UICollectionViewLayoutAttributes] = super.layoutAttributesForElementsInRect(rect) as! [UICollectionViewLayoutAttributes] 

    for var i = 0 ; i < attributesToReturn.count ; i++ 
    { 
     var currentLayoutAttributes: UICollectionViewLayoutAttributes = attributesToReturn[i] 
     var previousLayoutAttributes: UICollectionViewLayoutAttributes = attributesToReturn[i - 1] 
     var maximumSpacing: CGFloat = 50 
     var origin = CGRectGetMaxX(previousLayoutAttributes.frame) 
     if origin + maximumSpacing + currentLayoutAttributes.frame.size.width < self.collectionViewContentSize().width 
     { 
      var frame: CGRect = currentLayoutAttributes.frame 
      frame.origin.x = origin + maximumSpacing 
      currentLayoutAttributes.frame = frame 
     } 
    } 

    return attributesToReturn 

} 

我猜这是因为一开始没有i - 1对象,但我还能怎么做?

+0

该链接中的两个答案都在Swift中......无论如何,您试图访问索引-1处的项目,这是导致崩溃的原因。 – timgcarlson

回答

1

您可以重写代码,以检查负指数。

let origin: CGFloat 
if i - 1 >= 0 { 
    let previousLayoutAttributes = attributesToReturn[i - 1] 
    origin = previousLayoutAttributes.frame.maxX 
} else { 
    origin = 0 
}