在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:)是在扩展中声明的指定初始值设定项,根据Swift,这是非法的。但根据科科的说法,这并不是非法的,所以它肯定还需要继承!这个破损对我来说就像个虫子。。。作为程序员,我不应该被初始化器恰好在API头的结构中声明的技术问题所困扰。
[编辑:我已经向苹果提交了一份关于这个的错误报告,但是没有收到回复。我仍然无法解释这种情况。我也不认为这与extension有关。这似乎是错误的。]

最佳答案

这是一个bug,在Xcode 7/iOS 9中修复了这个bug。

10-08 05:45