假设我有一个我需要公开的协议。另外,我有一个实现这个协议的类,但是我希望保持内部。所以我想做点什么:
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
但这很糟糕。还有更好的方法吗?