委托方法必须声明为public

假设我有一堂课

public class MyClass: NSObject, ABCDelegate { func delegateMethod(a: a, b: b) { ... } } 

这个委托方法被MyClass中的一个单例调用,用来处理一些networking操作。

事情是编译器抱怨Method 'delegateMethod(...)' must be declared public because it matches a requirement in public protocol 'ABCDelegate'

我的问题是:

  1. 为什么编译器抱怨被声明为private funcfunc
  2. 我怎样才能将ABCDelegate方法声明为这个类的私有方法?

如果ABCDelegate被声明为public并且MyClass被声明为public,那么ABCDelegate所需的任何成员的MyClass实现都必须声明为public。 就这么简单。

如果你考虑一下,就不可能有其他的方法。 MyClass的知识是公开的。 ABCDelegate的知识是公开的。 关于MyClass采用ABCDelegate的事实的知识是公开的。 因此,MyClass实现ADCDelegate所需的成员的知识必须是公开的 – 就像一天中的夜晚一样。

如果你真的想,你可以通过在命令链中插入一个非公共对象types来解决这个问题。 这编译罚款:

 public protocol Proto { func f() } public class A { private var helper : B! func g() { helper.f() } } private class B : Proto { func f() {} } 

但似乎非常愚蠢。 我的build议只是做编译器告诉你的事情,继续前进。