2017-01-14 12 views
2

Я использую CustomCollectionViewLayout от https://github.com/brightec/CustomCollectionViewLayout.Конвертация Swift2 -> Swift3: ошибки с любым

После преобразования из Swift2 в Swift3 возникают две ошибки в отношении Любые.

Error1: ошибка

override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? { 
    return self.itemAttributes[indexPath.section][indexPath.row] as! UICollectionViewLayoutAttributes 
} 

Сообщения:

CustomCollectionViewLayout.swift:115:54: Type 'Any' has no subscript members

Ошибка 2: Ошибка

override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? { 
    var attributes = [UICollectionViewLayoutAttributes]() 
    if self.itemAttributes != nil { 
     for section in self.itemAttributes { 

      let filteredArray = (section as AnyObject).filtered(

       using: NSPredicate(block: { (evaluatedObject, bindings) -> Bool in 
        return rect.intersects(evaluatedObject.frame) 
       }) 
       ) as! [UICollectionViewLayoutAttributes] 


      attributes.append(contentsOf: filteredArray) 

     } 
    } 

    return attributes 
} 

Сообщения:

Value of type 'Any?' has no member 'frame'

Любые идеи, как исправить проблемы с Any/AnyObject?

+0

Я также сталкиваюсь с таким же вопросом –

ответ

0

Я решил ошибки, заменить оба методы ниже тех

override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? { 
     //return self.itemAttributes[indexPath.section][indexPath.row] as! UICollectionViewLayoutAttributes 
     let arr = self.itemAttributes[indexPath.section] as! NSMutableArray 
     return arr[indexPath.row] as! UICollectionViewLayoutAttributes 
    } 


override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? { 
     var attributes = [UICollectionViewLayoutAttributes]() 
     if self.itemAttributes != nil { 
      for section in self.itemAttributes { 

       let filteredArray = (section as! NSMutableArray).filtered(

        using: NSPredicate(block: { (evaluatedObject , bindings) -> Bool in 
         let a = evaluatedObject as! UICollectionViewLayoutAttributes 
         return rect.intersects(a.frame) 
        }) 
        ) as! [UICollectionViewLayoutAttributes] 


       attributes.append(contentsOf: filteredArray) 

      } 
     } 

     return attributes 
    }