__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注释中的注释所示,如果子类被子类化,则会分解。
我没有声称这种做法在风格上是好的,但这当然是可能的。
总结以上是内存溢出为你收集整理的Swift等于__attribute((objc_requires_super))?全部内容,希望文章能够帮你解决Swift等于__attribute((objc_requires_super))?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)