gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:08:12 24 4
gpt4 key购买 nike

在 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,这是非法的。但根据 Cocoa 的说法,这并不违法,所以它肯定仍然需要继承!这种破坏对我来说就像是一个错误......作为程序员,我不应该被 API 头结构中恰好声明初始化程序的技术细节所困扰。

[编辑:我已就此向 Apple 提交错误报告,但未收到任何回复。这种情况对我来说仍然是莫名其妙的。我也不认为这与 extension 有任何关系。这似乎是错误的。]

最佳答案

这是一个错误,事实证明它已在 Xcode 7/iOS 9 中修复。

关于swift - 为什么 Swift 1.2 破坏了 UIDynamicAnimator 的 init(collectionViewLayout :)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29632050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com