Swift - 内部实现公共协议

时间:2016-09-20 00:42:59

标签: swift public internal swift-protocols

假设我有一个我需要公开的协议。另外,我有一个实现这个协议的类,但是我希望保持内部。所以我想做点什么:

public protocol CustomDelegate {
  func didLoad()
}

public class Foo {
  public var delegate: CustomDelegate?
  var internalDelegate: CustomDelegate?
  ...
}

public class Bar {
  var foo: Foo
  init() {
    self.foo = Foo()
    self.foo.internalDelegate = self
  }
}
extension Bar: CustomDelegate {
  func didLoad() {
    print("bar has loaded")
  }
}

这不起作用,因为Bar的{​​{1}}实施是内部的,而CustomDelegate是公开的。但是我只关心内部使用的扩展,所以事情应该没问题。换句话说,我希望扩展是一个内部扩展,如果类是内部的那样,但Swift强迫它是公开的。实现这项工作的一种愚蠢方法是将内部协议中的协议复制为:

CustomDelegate

但这很糟糕。还有更好的方法吗?

0 个答案:

没有答案