Ios 自定义UICollectionViewLayout';s LayoutAttributesForelementsRect不会重写Swift 2.0中其超类中的任何方法

Ios 自定义UICollectionViewLayout';s LayoutAttributesForelementsRect不会重写Swift 2.0中其超类中的任何方法,ios,swift,uicollectionview,swift2,uicollectionviewlayout,Ios,Swift,Uicollectionview,Swift2,Uicollectionviewlayout,将我的项目从Swift 1.2迁移到2.0时,我遇到了一个问题:我正在为我的UICollectionView使用自定义布局,该布局在Swift 1.2中运行良好。但是,在Swift 2.0中,当试图覆盖自定义布局中的layoutAttributesForElementsInRect时,会出现一个错误,即方法不会覆盖其超类中的任何方法 我试图删除覆盖,现在错误变成方法'layoutAttributesForElementsInRect',带有Objective-C选择器'layoutAttribu

将我的项目从Swift 1.2迁移到2.0时,我遇到了一个问题:我正在为我的UICollectionView使用自定义布局,该布局在Swift 1.2中运行良好。但是,在Swift 2.0中,当试图覆盖自定义布局中的
layoutAttributesForElementsInRect
时,会出现一个错误,即
方法不会覆盖其超类中的任何方法

我试图删除
覆盖
,现在错误变成
方法'layoutAttributesForElementsInRect',带有Objective-C选择器'layoutAttributesForElementsInRect:'与超类'UICollectionViewLayout'中的方法'layoutAttributesForElementsInRect'冲突,该方法具有相同的Objective-C选择器
。这让我不知所措。任何帮助都将不胜感激

class CustomCollectionViewLayout: UICollectionViewLayout {
    //...
    override func layoutAttributesForElementsInRect(rect: CGRect) -> [AnyObject]? {
        let attributes : NSMutableArray = NSMutableArray()
        for section in self.itemAttributes {
            attributes.addObjectsFromArray(
                section.filteredArrayUsingPredicate(
                    NSPredicate(block: { (evaluatedObject, bindings) -> Bool in
                        return CGRectIntersectsRect(rect, evaluatedObject.frame)
                    })
                )
            )
        }
        return attributes as [AnyObject]
    }
}

您声明了错误的返回类型,这就是为什么编译器不允许您使用
覆盖
,并且您也没有重载该方法,因为重载的方法必须具有不同的参数类型;只有不同的返回类型是不够的。此方法的正确签名是
func layouttributesforementsinrect(\urect:CGRect)->[UICollectionViewLayouttributes]?


当我们使用时,不要使用
let attributes:NSMutableArray=NSMutableArray()
。不仅类型说明符
:NSMutableArray
是多余的(因为编译器可以从右边推断类型),而且更容易使用Swift的内置
数组
。只需将其从
let
(只读)更改为
var
,即可使其可变。换句话说,
var attributes=[UICollectionViewLayoutAttributes]()
更好。

您声明了错误的返回类型,这就是为什么编译器不允许您使用
覆盖
,并且您也没有重载该方法,因为重载的方法必须具有不同的参数类型;只有不同的返回类型是不够的。此方法的正确签名是
func layouttributesforementsinrect(\urect:CGRect)->[UICollectionViewLayouttributes]?


当我们使用时,不要使用
let attributes:NSMutableArray=NSMutableArray()
。不仅类型说明符
:NSMutableArray
是多余的(因为编译器可以从右边推断类型),而且更容易使用Swift的内置
数组
。只需将其从
let
(只读)更改为
var
,即可使其可变。换句话说,
var attributes=[UICollectionViewLayoutAttributes]()(
更好。

非常感谢您,它现在可以很好地编译和运行了!但它现在在调试区域
:CGContextSaveGState:invalid context 0x0中发出错误消息。如果要查看回溯,请设置CG\U CONTEXT\U SHOW\U backtrace环境变量。
。我一定要担心吗?我不知道。我昨天刚开始在我的一个操场上看到同样的错误。我一直忽略它,因为一切似乎都运行得很好,但如果它发生在一个生产应用程序中,那将是一个需要调查的问题。非常感谢,它现在编译并运行得很好!但它现在在调试区域
:CGContextSaveGState:invalid context 0x0中发出错误消息。如果要查看回溯,请设置CG\U CONTEXT\U SHOW\U backtrace环境变量。
。我一定要担心吗?我不知道。我昨天刚开始在我的一个操场上看到同样的错误。我一直忽略它,因为一切似乎都运行得很好,但如果它发生在一个生产应用程序中,那将是需要调查的事情。