在方法前面添加 required
使得所有子类都必须实现该方法。有没有办法做相反的事情:防止在子类的对象上调用父类(super class)中的方法? 禁止
?
当我写这篇文章时,我开始意识到这实际上可能不是一个好主意......因为子类的概念是它包含父类(super class)中的所有数据,然后是一些数据。从理论上讲,如果我需要限制对父类(super class)方法的访问,这意味着我可能做错了。
我想做的是为 UIButton 的子类编写一个 init
方法。我希望这个自定义 init
方法成为创建子类对象的唯一方法。但是 UIButton(父类(super class))init
方法是公共(public)的并且是必需的,所以我不能只是在它们上加上一个 private
并为自己编写一个工厂......但我不'我们不希望使用此类的开发人员继续尝试每个 init
函数,直到找到不会崩溃的函数。我想让大家清楚这是要使用的方法。
那么...Swift 中是否有功能可以显式阻止对父类(super class)方法的访问?不管怎样,在没有子类限制对父类(super class)功能的访问的情况下,实现这样的事情的“正确”方法是什么?
最佳答案
除非您需要自己调用该方法,否则可以使用@available(*, unavailable, message="Use XYZ instead")
。 Swift 将阻止任何人使用该方法。如果将对象转换为该方法仍然可用的父类(super class),则仍然可以使用它。
就像本例中的sizeThatFits(_:)
:https://github.com/fluidsonic/JetPack/blob/master/Sources/ui/View.swift#L341
关于ios - 与 "required"相反的 Swift,或在父类(super class)中具有所需 init 方法的工厂设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33980966/