委托方法必须声明为public

时间:2015-02-04 19:17:23

标签: ios swift

假设我有一个班级

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

此委托方法由MyClass中用于处理某些网络操作的单例调用。

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

我的问题是:

  1. 为什么编译器抱怨所声明的方法为private func或只是func
  2. 如何声明ABCDelegate方法对此类是私有的?

1 个答案:

答案 0 :(得分:6)

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

如果你考虑一下,它就无法以任何其他方式运作。 MyClass的知识是公开的。 ABCDelegate的知识是公开的。了解MyClass采用ABCDelegate的事实是公开的。因此,了解MyClass实现ADCDelegate所需成员的事实必须是公开的 - 它就像当晚一样。

如果您真的想要,可以通过在命令链中插入非公共对象类型来解决此问题。编译好了:

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

但它看起来非常愚蠢。我的建议只是做编译器告诉你的事情并继续前进。