Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么在Swift中使用私有属性/方法不常见_Ios_Swift_Accessor - Fatal编程技术网

Ios 为什么在Swift中使用私有属性/方法不常见

Ios 为什么在Swift中使用私有属性/方法不常见,ios,swift,accessor,Ios,Swift,Accessor,首先让我告诉你,我刚开始玩Swift,并没有看到很多用它编写的代码,但我看到的所有教程都没有像在其他一些语言中那样使用private,据我所知,Swift有三个访问控制,private,Public和Internal,默认值为内部 我有点困惑,尽管我通常没有很多编程经验,但我的理解是,在一个程序中,所有内容都是私有的,只公开希望向其他类公开的属性和方法 来自苹果文档 除了提供不同级别的访问控制,Swift 通过以下方式减少了指定显式访问控制级别的需要 为典型场景提供默认访问级别确实如此,如果你

首先让我告诉你,我刚开始玩Swift,并没有看到很多用它编写的代码,但我看到的所有教程都没有像在其他一些语言中那样使用private,据我所知,Swift有三个访问控制,
private
Public
Internal
,默认值为
内部

我有点困惑,尽管我通常没有很多编程经验,但我的理解是,在一个程序中,所有内容都是私有的,只公开希望向其他类公开的属性和方法

来自苹果文档

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

对我来说,保留每个属性/方法作为默认值(
Internal
)基本上就是让其他类访问它们的值,对吗

为什么在Swift/Cocoa中,您很少看到对您不希望程序的其他部分具有访问权限的属性使用
Private
访问器

有没有人能如此友善地解释一下访问器的概念,以及为什么Swift是这样设计的,或者如果我在上面的假设中有错误的话,最好纠正我,同样我在OOP方面没有太多经验,我可能会对访问器的概念感到困惑

谢谢


更新:今天(2016年7月1日)我观看了视频#3应用MVC课程,该课程由iTunes的斯坦福大学提供,内容是
使用Swift
开发iOS 8应用程序,并在分钟内24:15Paul Hegarty谈论访问控制,我强烈推荐它。

Swift中的访问控制也是令我惊讶的事情之一,所以你并不孤单。SWIFT使用了与我以前熟悉的C++、爪哇、C语言不同的范例。

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

如果你想一想,Swift访问控制范例和C++/Java的一样有意义,它只是不同而已


请参阅以了解这两种语言之间的差异

我们确实使用
private
。我们只是不告诉你,因为这是…嗯…私人的。IMHO,你使用尽可能狭窄的访问控制的直觉仍然适用。我并不奇怪,你在教程中看到的片段忽略了这个主题,因为这是一个在更大的实际应用中经常出现的问题。我唯一一次经常看到使用的
private
是当某个存储属性支持某个计算属性时,与该存储属性的直接交互显然存在问题:您经常会看到标记为
private
。但是,简言之,我们中的许多人在自己的代码中使用
private
。@Rob您认为将
private
任何只在类(类范围)内使用的属性设置为
internal
是一种好的做法吗?这样,代码至少更具可读性。据我所知,理论上,如果您的代码将用于其他Xcode项目,您只需要使用访问控制,对吗?我想我们会有很多setter和getter,因为现在您可以访问所有属性值(我知道,getter和setter属于Swift中的计算机属性)。有关此主题的更多信息,请参阅我在原始帖子中的更新。