【发布时间】:2017-06-28 18:00:07
【问题描述】:
试图对将由单例类实现的协议实施访问控制。 我希望班级有一个 fileprivate init,有没有办法强制执行这种行为? 由于协议不是一个类,我不能将 init 放在协议扩展中。
【问题讨论】:
-
你不能。您不能使用协议来强制类限制对某些内容的访问,因为协议要求的所有实现都需要与协议本身一样可访问。如果协议是
internal,那么其要求的所有实现都需要是internal。 -
除此之外...根据您下面的 cmets,您想要这样做的原因似乎是确保实现协议的类是单例。但是,即使您可以使用协议来限制初始化程序的访问控制级别,这也不会阻止类具有更易于访问的 不同 初始化程序。仅仅拥有
fileprivate初始化器并不能确保该类是单例;它必须是类的唯一初始化器。 -
我知道这一点,这就是为什么我想也许子类化可以让我这样做,但在父类中使用 init 似乎是不可能的。