委托方法必须声明为public

Tha*_*nos 7 ios swift

假设我有一堂课

public class MyClass: NSObject, ABCDelegate {
    func delegateMethod(a: a, b: b) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这个委托方法由一个MyClass处理一些网络操作的单例调用.

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

我的问题是:

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

mat*_*att 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() {}
}
Run Code Online (Sandbox Code Playgroud)

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