微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在swift中思考C#protected accessor的正确方法是什么?

在c#中,我们有受保护的访问器,它允许类成员在继承的clases上可见,但对其余的则不可见.

Swift中这不存在所以我想知道对于这样的事情是什么是正确的方法

I want to have a variable (internal behavior) and and a public method using this variable on a base class. This variable will be used also on inherited clases.

我看到的选项

>忘记基类,并在我需要的任何地方实现变量和方法.错误,重复的代码
>按组合实现继承.我将创建一个包含常用方法的类,这将由组合而不是继承使用.错误但仍然重复可以通过继承避免的代码
>实现继承并在基类上创建变量internal.错误,因为暴露事情没有任何理由,除了允许继承的clases的可见性.

基类的实现细节

我想要一个NSOperationQueue实例和一个公共方法来取消排队操作.我从继承的类向此队列添加新操作.

在Swift中,正确的答案几乎总是协议和扩展.它几乎从不继承.有时Cocoa会阻碍我们,因为Cocoa中的类比协议更常见,但目标几乎总是协议和扩展.子类化是我们的最后选择.

您的特定情况令人困惑,因为NSOperationQueue已经有一个公共方法来取消排队操作(cancelAllOperations).如果要保护队列免受外部访问(例如,阻止调用者直接使用addOperation),则应将队列放在另一种类型(即组合)中,并将所需内容转发到队列.关于您正在解决的具体问题的更多细节将允许我们帮助建议其他类似Swift的解决方案.

如果最终你需要一些看似受保护或朋友的东西,那么正确的解决方案就是私有的.将您的子类或您的朋友放在与目标相同的文件中,并将私有内容标记为私有.或者,将需要协同工作的东西放在框架中,并将属性标记为内部. Swift Blog提供了一个很好的解释,为什么这是一个有意的选择.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐