我有一个子类,其中包含我定义的方法和从其父类继承的方法。我希望 Parent 中的某些方法对用户不可用,或者至少在使用时生成编译错误/警告。示例:
class Parent {
public func secretMethod() { // Don't want anyone to use
}
}
class Child: Parent {
public func overtMethod() { // Fine with people using
}
}
Child.init().overtMethod() // Fine
Child.init().secretMethod() // Not Fine. Should not be viewable/useable/accessible
我无法更改父类。我多么渴望能够将 secretMethod
设置为 private
。 Swift 不允许在覆盖函数时限制访问级别,因此我也无法在 Child 类中将 secretMethod
设置为 private
。
到目前为止,我一直在使用@available
来标记带有编译警告和消息的方法,但我希望有更好的方法吗?我考虑过覆盖并抛出错误,但如果原始方法未标记为 throws
,则无法完成。
谢谢。
编辑:我也无法覆盖 secretMethod 使其不可用。 Child 类需要访问它。
最佳答案
重新考虑您的设计。
我认为您可能只考虑“用户”(另一个开发人员?..您正在编写一个库,我猜?)而不是现有源。子类化的基本思想是子类可以在父类使用的任何地方使用。
class A: UIView {
func availableMethod() {
}
// func layoutSubviews() ----- let's say you want to hide this method
}
这里出现问题是因为您不知道任何其他内部类可能正在使用 layoutSubviews
做什么,如果您以某种方式将其阻止在 A
的实例上,那么任何事情期望能够像使用 UIView
的实例一样使用该实例现在将失败。
关于ios - 如何在 Swift 中隐藏继承的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53837887/