有Swift等于吗?
__attribute((objc_requires_super))
不,没有Swift等价于__attribute((objc_requires_super))。
等效功能,Swift Attributes,不包含此类属性。
Swift inheritance documentation的这个功能将被提及的部分只提到:
When you provide a method,property,or subscript override for a subclass,it is sometimes useful to use the existing superclass implementation as part of your override.
请注意,您可以使用final来防止覆盖函数,因此您可以通过提供由不可覆盖的方法调用的空的可覆盖方法来有效地完成所需的任务:
class AbstractStarship { var tractorBeamOn = false final func enableTractorBeam() { tractorBeamOn = true println("tractor beam successfully enabled") tractorBeamDidEnable() } func tractorBeamDidEnable() { // Empty default implementation } } class FancyStarship : AbstractStarship { var enableDiscoBall = false override func tractorBeamDidEnable() { super.tractorBeamDidEnable() // this line is irrelevant enableDiscoBall = true } }
子类然后将覆盖可覆盖的方法,无论他们是否调用super还是不重要,因为超类的实现是空的。
正如Bryan Chen注释中的注释所示,如果子类被子类化,则会分解。
我没有声称这种做法在风格上是好的,但这当然是可能的。