在c#中,我们具有protected
访问器,该访问器使类成员在继承的clase上可见,但在其余部分不可见。
在Swift中不存在这种方法,所以我想知道对于这样的事情有什么正确的方法:
我想要一个变量(内部行为)和一个在基类上使用此变量的公共方法。此变量也将用于继承的clase。
我看到的选择
基类的实现细节
我想要一个NSOperationQueue
实例和一个公共方法来取消排队的操作。我从继承的类向此队列添加新操作。
在Swift中,正确的答案几乎总是协议和扩展名。它几乎永远不会继承。有时,可可妨碍我们前进,因为可可中的类多于协议,但目标几乎总是协议和扩展。子类化是我们的最后选择。
您的特殊情况令人困惑,因为NSOperationQueue
已经有取消队列操作的公共方法(cancelAllOperations
)。如果要保护队列免受外部访问(例如防止调用者addOperation
直接使用),则应将队列放入其他类型(即合成)中,然后将所需内容转发给队列。有关您要解决的特定问题的更多详细信息,将使我们能够帮助建议其他类似Swift的解决方案。
如果最后您需要看起来像protected
或的东西,friend
正确的解决方案是private
。将您的子类或朋友与目标放置在同一文件中,并标记私人物品private
。或者,将需要一起使用的东西放在框架中,并标记属性internal
。在斯威夫特博客提供的,为什么这是有意选择一个很好的解释。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句