在c#中,我们有一个protected访问器,它允许类成员在继承的clases上可见,但对于其余的类成员是不可见的。
在Swift中,这是不存在的,所以我想知道对于这样的事情有什么正确的方法:
我希望有一个变量(内部行为)和一个在基类上使用这个变量的公共方法。此变量也将用于继承的clases。
选项我看到
基类的实现细节
我希望有一个NSOperationQueue实例和一个公共方法来取消排队操作。我从继承的类中向这个队列添加新的操作。
发布于 2015-10-29 15:04:52
在Swift中,正确的答案几乎总是协议和扩展。这几乎不是继承。有时Cocoa会阻碍我们的发展,因为Cocoa中的类比协议中的类更多,但是目标几乎总是协议和扩展。子类是我们最后的选择。
您的特殊情况令人困惑,因为NSOperationQueue已经有了取消排队操作(cancelAllOperations)的公共方法。如果希望保护队列不受外部访问(例如,阻止调用方直接使用addOperation ),则应将队列放入另一类型(即组合),并将所需内容转发到队列。关于你正在解决的具体问题的更多细节将使我们能够帮助建议其他类似Swift的解决方案。
如果最终需要类似于protected或friend的东西,正确的解决方案是private。将您的子类或您的朋友与目标放在同一个文件中,并标记为private。或者,将需要在框架中工作的东西放在一起,并标记属性internal。Swift博客很好地解释了为什么这是一个有意的选择。
https://stackoverflow.com/questions/33415366
复制相似问题