首页 > 解决方案 > 如何在 Swift 中隐藏继承的方法

问题描述

我有一个子类,其中包含我定义的方法和从其父类继承的方法。我希望 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

我无法更改父类。我多么渴望能够设置secretMethodprivate. Swift 在覆盖函数时不允许限制访问级别,所以我不能设置secretMethodprivate

到目前为止,我一直在使用@available编译警告和消息来标记该方法,但我希望有更好的方法?我考虑过覆盖并抛出错误,但如果原始方法未标记,则无法完成throws

谢谢你。

编辑:我也不能覆盖 secretMethod 使其不可用。Child 类需要访问它。

标签: iosswift

解决方案


重新考虑您的设计。

我认为您可能只考虑“用户”(另一个开发人员?..您正在编写一个库,我猜?)而不是现有源。子类化的基本思想是子类将能够在任何使用父类的地方使用。

class A: UIView {
  func availableMethod() {
  }
  // func layoutSubviews() ----- let's say you want to hide this method
}

问题出在这里,因为您不知道任何其他内部类可能对 执行什么操作,layoutSubviews并且如果您以某种方式在 的实例上阻止它A,那么任何期望能够像使用该实例一样使用该实例的东西UIView现在都将失败。


推荐阅读