假设我有一个班级
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'
。
我的问题是:
private func
或只是func
答案 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() {}
}
但它看起来非常愚蠢。我的建议只是做编译器告诉你的事情并继续前进。