为什么Swift 1.2破坏了UIDynamicAnimator的init(collectionViewLayout :)的继承?

时间:2015-04-14 15:59:03

标签: swift

在Swift 1.1和之前,这是合法的:

let layout = UICollectionViewLayout()
class MyDynamicAnimator : UIDynamicAnimator {}
let anim2 = MyDynamicAnimator(collectionViewLayout:layout)

在Swift 1.2中,它拒绝编译。为什么呢?

我可以通过覆盖init(collectionViewLayout:)来解决问题,除了调用super:

之外什么都不做
class MyDynamicAnimator : UIDynamicAnimator {
    override init(collectionViewLayout:UICollectionViewLayout) {
        super.init(collectionViewLayout:collectionViewLayout)
    }
}

但这似乎有点疯狂。如果我可以覆盖它,为什么我不能继承它呢?

注意:我猜这个问题的原因可能是UIDynamicAnimator的init(collectionViewLayout:)是扩展中声明的指定初始值设定项,这是非法的根据斯威夫特的说法。但根据Cocoa的说法,这并不违法,所以它仍然需要继承!这种破坏感觉对我来说就像一个错误......作为程序员,我的业务应该不会被初始化程序碰巧在API头的结构中声明的技术问题所困扰。

[编辑:我已经向Apple提交了一份关于此问题的错误报告,但没有得到回复。这种情况对我来说仍然莫名其妙。我不相信这与extension有任何关系。这似乎是错的。]

1 个答案:

答案 0 :(得分:1)

这是一个错误,因为它已在Xcode 7 / iOS 9中得到修复。