扩展方法只能在类内部访问

时间:2017-08-24 15:17:19

标签: swift

如何在extension中创建方法并让它只能在类(或其子类)中访问,如private方法,但在extension内的另一个文件中声明}?

private无法工作,因为它必须在同一声明中。

fileprivate无法使用,因为它必须位于同一个文件中。

public或默认无效,因为它可以在其他类中看到。

我错过了什么吗?

我正在寻找extensionprivateclassprivate等内容。

2 个答案:

答案 0 :(得分:1)

目前,由于扩展程序中的私有可访问性,Swift 3存在一些问题。在swift4中,它是可能的。您可以尝试使用Xcode 9 beta。

答案 1 :(得分:0)

您目前无法执行要求的操作,我同意这在某些情况下会很有帮助。

假设我们有此协议:

protocol HidableViewed {
    var hidableView: UIView
}

此协议用于表示某些视图控制器具有可以隐藏的视图(这在其业务案例中很有意义)。

那么我们想要具有隐藏视图的东西吗?我们当然希望隐藏它们,但是隐藏操作在该协议的每个实例中都是相同的。因此,为避免在每个视图控制器中重写隐藏方法,我们希望在我们的协议中实现一次。

extension HidableViewed {
    func hideView() {
        self.hidableView.isHidden = true
    }
}

非常好,多么方便!

但是有一个问题:如果视图控制器实现了此协议,则任何其他类都将能够隐藏其视图。而且我们当然在某些情况下不希望这样做,这将我们带到了最初的问题。