ios - 与 "required"相反的 Swift,或在父类(super class)中具有所需 init 方法的工厂设计模式

标签 ios swift subclass factory-pattern superclass

在方法前面添加 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/

相关文章:

wpf - UserControl 和 ContentControl 有什么区别?

json - 在 Go 中将组合对象转换为 json

iphone - objective-c : Filter out results from NSMutableArray by a dictionary key's value?

ios - 使用 NSFetchedResultsController 在底部 UITableView 中加载更多内容

swift - Swift 4 中的特定头部碰撞

ios - 控制台输出中的 lldb 错误,无法获得正确的结果

ios - NSMutableDictionary 的子类化有哪些陷阱和磨难?

ios - 将 pushwoosh 与多个目标应用程序一起使用

ios - Swift 3 - 检测 UITextView 中的新行

ios - Tableview cell 双击播放视频,然后它将全屏模式