在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。