Tag: 代码结构

代码结构和可读性第2部分-类和结构

欢迎回来,在第1部分中,我们介绍了一些基础知识:变量,数据结构和函数。 代码结构和可读性第1部分—变量,数据结构和函数 如果您来自我的有关结构和可读性的Swift编程文章,那么您已经知道一些基本知识…… medium.com 我们学会了一些清理它们的方法,但是现在我们继续前进。 我计划这次对您轻松一点,因为我们在这里只讨论类和结构。 如果您不了解类或结构,建议您阅读我为Swift写的一篇文章。 不用担心Swift不是您的语言,如果您的语言支持它们,那么足够通俗易懂,足以让您掌握类和结构。 类和结构 让我们从那里抛出一个示例类开始。 公共类动物{ 命名:字符串 让收藏夹食物:字符串 变量年龄:整数 让countryOfOrigin:字符串 init(名称:字符串,最喜欢的食物:字符串,年龄:整数, countryOfOrigin:字符串){ self.name =名称 self.favoriteFood =最喜欢的食物 自我年龄=年龄 self.countryOfOrigin = countryOfOrigin } } 当然,我们可以将其更改为struct并忘记初始化程序,但是我要使用一个类,因为让我们面对现实吧,即使您尝试使其具有可读性,也有点草率。 老实说,当结构可以使用时,我尽量不要使用类。 我不必担心初始化(除非我想),我不必担心参考周期(除非我要进行极端优化),并且我的代码库要小几行。 那么我们可以使用类来解决这个问题吗? 好吧,确定间距确实有帮助,所以让我们从这里开始: 公共类动物{ 命名:字符串 让收藏夹食物:字符串 var age =年龄 让countryOfOrigin:字符串 init(名称:字符串,最喜欢的食物:字符串,年龄:整数, countryOfOrigin:字符串){ self.name =名称 self.favoriteFood =最喜欢的食物 自我年龄=年龄 self.countryOfOrigin = countryOfOrigin } } 一点间距与此很长的路要走。 但是我认为我们可以做得更好。 每当我的代码看起来像这样的部分难以阅读时: … […]

Swift编程入门第10部分-代码结构,可读性和原理

在上一篇文章中,我们介绍了基本协议,扩展和下标。 开始进行Swift编程第9部分-基本协议,扩展和下标 在上一篇文章中,我们介绍了类型转换,安全展开可选内容和访问控件。 medium.com 协议具有更强大的功能,扩展功能更是如此,但是将来我们将介绍这些功能。 既然您现在知道了Swift中常用的顶级实体,我认为现在是时候讨论代码结构和可读性了。 如果您像我希望的那样一直在练习,您可能已经编写了一个相当大的程序,吃过晚饭或出去了,而当您回来时,您会觉得自己的代码有些失落。 刚开始时,这种情况经常发生。 如果分心,您会感到沮丧,因为您忘记了5分钟前写下的内容。 别担心,这发生在我们大多数人身上。 我有一个好消息,随着时间的推移,它确实变得越来越容易,需要多长时间取决于您练习的次数。 对我来说,每天大约要花6个月的编码时间。 从我醒来直到上床睡觉的时间,甚至在周末,我总是在写代码。 不要误会我的意思,这并不意味着我没有生活,我仍然出去玩得开心。 有时我会筋疲力尽,不得不停止编写代码一两天。 即便如此,我仍在阅读文章,并试图做得更好。 所以继续练习。 前几天,我开始思考,Swift中的代码结构真的没有任何东西。 一切似乎都是道听途说或遵循教程的结构。 每个人的写作风格都有自己的怪癖,没有标准化的东西。 我不是要规范代码结构 。 我想说清楚。 我只是将我所看到的所有内容和我自己的代码样式进行汇总,以帮助您提供一个起点,使您可以组织代码并轻松地理解以后再返回代码时的情况。 话虽这么说,让我们高谈一下应用程序的各个部分如何在您的Swift文件中显示。 类,协议和扩展仅是顶级实体。 最高层,我是说它们没有被花括号包围。 可以这么说,他们坐在裸露的文件上。 结构和枚举几乎总是顶级实体,但是它们也可以出现在其他结构或枚举中。 函数可以是顶级对象,但我只建议在控制台程序中执行此操作。 对于macOS,iOS,tvOS和watchOS程序,我会坚持将功能保留在类中。 常量和变量应在尽可能小的范围内声明,这意味着如果只需要在if语句中存在一个变量,则在if语句内声明它。 如果将在整个文件中使用其中任何一个,请在文件顶部声明它并提供适当的访问控制。 综上所述,我将为您提供一个示例,说明如何以代码格式布置文件,我的示例将基于放置在所有新View Controller文件中的View Controller代码段。 对于您自己以及其他阅读您代码的开发人员而言,可读性比对用户而言更为重要。 您应该努力在所有代码中都具有出色的可读性。 分手 如您所见,当您写入大量功能时,这些文件会变得很长。 因此,我倾向于将这些文件分解为同一文件夹组下的单独文件。 我见过的命名约定如下: ViewController+NameOfDelegate.swift或ViewController+NameOfDataSource.swift 这样,我知道要单击的文件应包含哪些代码,这有助于我确保该文件仅包含与其相关的代码。 使用上面的示例代码,我将提取枚举并将它们放在自己的文件中,如果我想为全局枚举创建一个名为Enums.swift文件,我可以使用//MARK:将其拆分为几个部分,以便稍后可以跳入进行更新。 如果文件中的枚举仅用于此视图控制器,则将访问控制设置为internal,但将文件与ViewController类放在同一组下。 除非协议是在模型中定义的,并且打算供其他类使用,否则我可能会取出协议及其扩展名并将其放置在自己的文件中。 如果协议具有类或结构特定的扩展名,我将使用//MARK:通过Protocols.swift文件将其逻辑上分开。 同样,我将以与Enums.swift相同的方式放置文件。 我还会撕掉该结构并将其用作名为House.swift 。 我还将它分成名为Models的组,因为它是房屋的模型。 该类及其所有方法将保持不变,但是我可以取出特定于类的扩展,并将其放置在新文件ViewController+Extensions.swift 。 只要确保将需要由扩展程序调用的ViewController.swift中的任何方法都设置为internal […]