ios - 如何在 Swift 中隐藏继承的方法

标签 ios 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

我无法更改父类。我多么渴望能够将 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/

相关文章:

ios - 从数组索引 obj c 加载某些信息

iphone - 获取从后台恢复应用程序的推送通知

ios - 简单 2D "collision detection"iOS

ios - 向 Xcode Interface Builder 添加自定义调色板

iOS 如何重新启动应用程序以更改语言 Swift 4

IOS View如何让它透明完全消失

swift - 如何阻止 NSTextView 显示指定字体不支持的字符

ios - 方法外设 : didWriteValueForCharacteristic: error: is not called

ios - 如何使用从类函数编辑环境对象?

swift - 如何使用 eureka lib 在 View 中调整表单 View Controller ?