在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
有任何关系。这似乎是错的。]
答案 0 :(得分:1)
这是一个错误,因为它已在Xcode 7 / iOS 9中得到修复。