【问题标题】:Why is not common the use of Private properties/methods in Swift为什么在 Swift 中使用私有属性/方法不常见
【发布时间】:2015-11-22 01:58:49
【问题描述】:

首先让我告诉你,我刚开始使用 Swift,并没有真正看到用它编写的很多代码,但是我看到的所有教程都没有像在其他一些语言中那样使用私有据我了解,Swift 有三个访问控制,PrivatePublicInternalInternal 是默认设置。

我有点困惑,尽管我总体上没有很多编程经验,但我的理解是,在程序中,您将所有内容设为私有,并且只公开您想要的属性和方法暴露给其他类。

来自 Apple 文档

除了提供各种级别的访问控制,Swift 通过以下方式减少了指定显式访问控制级别的需要 为典型场景提供默认访问级别。 确实,如果你 正在编写单目标应用程序,您可能不需要明确指定 完全访问控制级别。

对我来说,通过将每个属性/方法保留为默认值 (Internal),您基本上可以访问其他类的值,对吗?

为什么在 Swift/Cocoa 中您很少看到使用 Private 访问器来访问您不希望程序的其他部分访问的属性?

谁能这么好心地解释一下一般的概念访问器以及为什么 Swift 会这样设计,或者如果我在上面所做的假设有误,甚至可以更好地纠正我,我也不需要太多在 OOP 方面的经验,我可能会对一般访问器的概念感到困惑。

谢谢

更新:今天(01/07/2016)我观看了视频 #3 应用 MVC,来自 @ 提供的课程 Developing iOS 8 Apps with Swift iTunes 中的 987654328@ University 和 24:15 Paul Hegarty 谈论访问控制,我强烈推荐它。

【问题讨论】:

  • 我们确实使用private。我们只是不告诉你这件事,因为它是……嗯……私人的。 ??????
  • 您使用尽可能窄的访问控制的直觉仍然适用,恕我直言。对于您在教程中看到的 sn-ps 对这个主题的忽视,我并不感到惊讶,因为这是一个在更大的实际应用程序中往往会出现的问题。我唯一一次看到使用private 是当有一些计算属性由一些存储属性支持时,与该存储属性的直接交互显然是有问题的:您经常会看到标记为private。但是,简而言之,我们中的许多人在我们自己的代码中使用private
  • @Rob 您是否认为将private 设置为仅在类(类范围)内使用的任何属性并将其余属性保留为internal 是一个好习惯?这样代码至少会更易读。

标签: ios swift accessor


【解决方案1】:

Swift 中的访问控制也是让我感到惊讶的事情之一,所以你并不孤单。 Swift 使用的范式与我之前熟悉的 C++、Java、C# 使用的范式完全不同。

Swift 的访问控制不是基于类,而是基于源文件和模块。这个想法是,如果您编写一个类,那么默认情况下您应该可以从同一源文件或模块中的另一个类访问其所有成员。如果其他人扩展了您的类,他们的代码将位于不同的模块和源文件中,因此除非您授予他们访问权限,否则他们将无法访问您的基类成员。

如果你仔细想想,访问控制的 Swift 范式与 C++/Java 的范式一样有意义,只是不同而已。

请参阅http://www.swiftprogrammer.info/swift_vs_cpp.html 了解这方面和其他语言之间的差异。

【讨论】:

  • 据我了解,理论上,如果您的代码将用于其他 Xcode 项目,您只需要使用访问控制,对吗?我想我们会有很多 setter 和 getter,因为现在您可以访问所有属性值(我知道,getter 和 setter 在 Swift 中属于计算机属性)。
  • 在我的原始帖子中查看我的更新以获取有关此主题的更多信息。
猜你喜欢
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 2011-03-19
相关资源
最近更新 更多