如何在extension
中创建方法并让它只能在类(或其子类)中访问,如private
方法,但在extension
内的另一个文件中声明}?
private
无法工作,因为它必须在同一声明中。
fileprivate
无法使用,因为它必须位于同一个文件中。
public
或默认无效,因为它可以在其他类中看到。
我错过了什么吗?
我正在寻找extensionprivate
或classprivate
等内容。
答案 0 :(得分:1)
目前,由于扩展程序中的私有可访问性,Swift 3存在一些问题。在swift4中,它是可能的。您可以尝试使用Xcode 9 beta。
答案 1 :(得分:0)
您目前无法执行要求的操作,我同意这在某些情况下会很有帮助。
假设我们有此协议:
protocol HidableViewed {
var hidableView: UIView
}
此协议用于表示某些视图控制器具有可以隐藏的视图(这在其业务案例中很有意义)。
那么我们想要具有隐藏视图的东西吗?我们当然希望隐藏它们,但是隐藏操作在该协议的每个实例中都是相同的。因此,为避免在每个视图控制器中重写隐藏方法,我们希望在我们的协议中实现一次。
extension HidableViewed {
func hideView() {
self.hidableView.isHidden = true
}
}
非常好,多么方便!
但是有一个问题:如果视图控制器实现了此协议,则任何其他类都将能够隐藏其视图。而且我们当然在某些情况下不希望这样做,这将我们带到了最初的问题。