【问题标题】:Conversion Swift2 -> Swift3: Errors with Any转换 Swift2 -> Swift3:任何错误
【发布时间】:2017-01-14 10:09:23
【问题描述】:

我正在使用来自 https://github.com/brightec/CustomCollectionViewLayout 的 CustomCollectionViewLayout。

在从 Swift2 转换到 Swift3 之后,出现了两个关于 Any 的错误。

错误1:

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

消息错误:

CustomCollectionViewLayout.swift:115:54: 类型 'Any' 没有下标成员

错误 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
}

消息错误:

“任何?”类型的值没有成员“框架”

任何想法如何解决 Any/AnyObject 的问题?

【问题讨论】:

  • 我也面临同样的问题

标签: swift3 any


【解决方案1】:

我解决了错误,将您的两种方法替换为以下方法

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
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多