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 在覆盖函数时不允许限制访问级别,所以我不能设置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
现在都将失败。
推荐阅读
- python - Pandas - 将字符串 json 存储到列中并将其写入文件
- c++ - OpenCV:如何使用 5 点算法从来自不同相机的两幅图像之间的特征匹配计算基本矩阵?
- keras - Keras中框坐标和锚框的区别
- java - 从流中获取唯一对象(如果存在)
- powershell - 为 filesystemwatcher 设置路径时出现问题
- node.js - nodejs 的“ng serve”在哪里?其他语言有类似的工具吗?
- macos - AppKit/Cocoa 模拟风格的自定义 NSControl
- python - 石墨烯:枚举参数似乎不起作用
- matlab - 设置 Matlab WindowButtonDownFcn 并保留默认行为
- laravel - 无法开箱即用地运行 Laravel Dusk