想知道你是否能够为我回答一个非常基本的初学者问题。我正在研究Lynda上的Cocoa + Swift教程,我对类/对象有点困惑。
基本上,我想知道为什么我们必须为我们创建的每个新类创建一个新的swift文件。
据我所知,您可以在项目的任何 .swift 文件中创建一个新类。我的问题是,为什么我们必须不断为每个新类创建 .swift 文件。
我想知道为什么不只有一个名为 AllClasses.swift 的 .swift 文件可以创建所有类,例如:
AllClasses.swift 中包含以下代码:
Class FirstClass : NSObject
Class SecondClass : NSObject
Class ThirdClass : NSObject
Class FourthClass : NSObject
反对:
FirstClass.swift 中包含以下代码:
Class FirstClass : NSObject
SecondClass.swift 中的代码如下:
Class SecondClass : NSObject
ThirdClass.swift 中包含以下代码:
Class ThirdClass : NSObject
FourthClass.swift 中的代码如下:
Class FourthClass : NSObject
我只想知道为什么我们需要将不同的代码分成文件,如果可以从项目的任何区域内调用它们。对于Mac应用程序,似乎几乎所有内容都可以在 AppDelegate.swift 文件中完成。
这是一个愚蠢的问题,但另一个可能使面向对象的障碍成为我完全掌握的难题。
答案 0 :(得分:30)
也许我可以用一种有趣的方式解释它:
最初没有文件概念,所有代码都在一个实体中。这些实体中的代码由行号引用。因为一切都在一个地方很容易找到你想要的东西,即使程序很小。它比打孔磁带更好,因此有很多欢乐。我们必须做一些关于从卡带装载的事情。
然而有人发现你可以将代码分解为名为 modules 的单独部分,这与软件变得更大一样好。男人我的10MB硬盘是巨大的。 每个模块都是专家,可以致电其他专家。 它使您的代码更易于导航。很高兴。
然后有人发现面向对象(OO)并且文件很便宜。程序是如此之大,现在人们很难找到那个模拟非洲燕子的空速的课程,该课程包含10000多行的多课程文件,也许是时候开始上课了在自己的文件中。不用说,有很多欢乐。
然后软件变得如此之大,以至于有人发现了源代码控制,这对于一个编码团队都在一个软件上进行冥想时最为重要。疯狂确保了兄弟情谊,他们不小心努力在一个30,000多行的文件中编写一个程序(非洲燕子的研究已经发展到包括欧洲燕子),即使有OO,也只会导致冲突后的线冲突在他们尝试检查源控制系统的更改时。赌注有很多燃烧。后来的启示导致将代码分解成许多文本或文件是避免私刑的方法。
我相信僧侣现在正在研究他们最喜欢的颜色和各个首都城市。
答案 1 :(得分:9)
一些原因:
私人访问将实体的使用限制在其自己的定义中 源文件。使用私有访问来隐藏实现细节 一个特定的功能。
增量构建 - 将不再更改未更改的源文件 默认情况下重新编译,这将显着改善构建 大多数常见病例的时间。您的代码更大的结构更改 可能仍需要重建多个文件。
答案 2 :(得分:8)
您不必为每个文件定义一个类,但我建议您这样做。我最近为一个客户开发了一个项目,在一个源文件中有几个类,并且在文件中定义了一些类,这些类的名称与类名不匹配。 (这是在Objective-C中,因此每个"文件"实际上是一对文件,.h头文件和.m实现文件,但从逻辑上讲它们是一个。)
这让人感到困惑,我浪费了相当多的时间来摸索寻找事物。
为每个文件定义一个类并使文件名和类名完全匹配是一个很好的约定。这就像将每个学校科目放在一个单独的活页夹中一样。当您需要找到一个类时,您确切地知道要打开哪个文件来查找它。
答案 3 :(得分:4)
我还为您的问题投票+1,并为上面的答案投票。
作为一个新手我真的很同意很难获得类和继承概念。
但是相信在单独的文档中处理代码要好得多,也许使用MVC概念,而不是将这些代码放在一个大型文档中。
我自己的经验,它清除了你的代码的云。
答案 4 :(得分:4)
答案 5 :(得分:0)
我只想补充一下观察,Swift的fileprivate
访问修饰符实际上有时需要,将许多类放在一个源文件中。
“每个源文件一个类”不一定适合Swift的设计。因此,当我需要严格控制要公开的属性时,通常对于一个API我只有一个非常大的源文件。
唯一的选择是为每个API和使用内部字段创建一个单独的框架。