gpt4 book ai didi

ios - 自定义 UICollectionViewLayout 的 layoutAttributesForElementsInRect 不会覆盖 Swift 2.0 中其父类(super class)的任何方法

转载 作者:搜寻专家 更新时间:2023-11-01 05:51:02 25 4
gpt4 key购买 nike

当我将我的项目从 Swift 1.2 迁移到 2.0 时,我遇到了一个问题:我正在为我的 UICollectionView 使用自定义布局,它在 Swift 1.2 中运行良好。但是,在 Swift 2.0 中,当尝试覆盖自定义布局中的 layoutAttributesForElementsInRect 时,出现错误提示 Method does not override any method from its superclass

我试图删除 override,现在错误变成了 Method 'layoutAttributesForElementsInRect' with Objective-C 选择器 'layoutAttributesForElementsInRect:' conflicts with method 'layoutAttributesForElementsInRect' from superclass 'UICollectionViewLayout' with相同的 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]
}
}

最佳答案

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

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

关于ios - 自定义 UICollectionViewLayout 的 layoutAttributesForElementsInRect 不会覆盖 Swift 2.0 中其父类(super class)的任何方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32291135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com