如何使函数只能由特定的类快速调用?

时间:2019-03-20 15:40:42

标签: swift

我有两个框架A和B。我在B内部有一个名为getMap()的公共函数,该函数返回地图的副本(B中的私有变量)。所以我在A中调用getMap()以获取该值。很好,因为它是副本,所以无论我对返回的值执行什么操作,都不会影响B中的实际变量。

现在我对该值进行了一些处理,我需要将其传递回B。这是问题所在:为了将其传递回,它必须是一个公共函数,但是我不想要其他框架或应用程序调用此函数,因为只有A应该对此映射值进行更改。

是否有任何方法可以在B中指定仅当A调用该函数时才应设置该值,否则忽略使用此函数的其他任何人?我听说您可以使用委托/协议来实现此目的,但我不明白。

2 个答案:

答案 0 :(得分:0)

是的,您应该能够使用委托/协议来实现。该协议仍然必须是公开的,这意味着任何类都可以实现该协议,但是对此的简单解决方案是不实现任何其他类。

您将像这样在框架B中创建协议:

protocol FrameworkBDelegate {
     func sendMapChanges(map: Map)
}

然后在准备就绪时调用委托方法,将其发送回另一个框架:

func changeMap() {
     var map = frameworkA.getMap()

     // Do stuff to map...

     delegate.sendMapChanges(map: map)
}

我不想编写有关如何实现委派的完整教程,因此这是Sundell的Swift的一个很好的教程:here
让我知道您是否需要任何帮助。

答案 1 :(得分:0)

这是不可能的。 如果创建框架,则必须确定方法/类是否需要公开。如果一种方法是公开的,那么没有一种现成的解决方案可以提供可满足您需求的防弹解决方案。最后,该方法对框架B的所有使用者都是公开的。

因此,您最终将在框架B中实现某种访问控制机制。这意味着框架A需要以某种方式(访问代码等)对自身进行身份验证。

delegate模式也无法解决您的问题,因此它也必须是公共的,以便框架A可以使用它。但是,如果它是公开的,则框架B的所有消费者都可以使用它。