方法的系谱

如果您曾经记下几行代码,那么很可能已经使用了一种方法。

方法使我们的生活更轻松。 可以使用.sorted()来组织一个数组,而不是实现一个永无休止的if语句来按字母顺序排列列表。 而不是使用自己的数字,.count()方法将为您提供元素数量!

Swift中提供了许多方法,我们常常认为它们是理所当然的。 但是它们都是从哪里来的?

事实是,所有这些方法都是通过类和结构创建我们自己的方法的方式形成的! 每次我们打开新的Project或Playground文件时,xCode编译器都会导入一组类和规则,这些类和规则确定代码的行为方式。

但是,这仍然无法回答这些方法和类来自何处的问题,因此要找出答案,让我们看一下单个方法并将其沿袭追溯到源头。 .count()函数呢?

Apple的文档将.count()描述为“返回多值列表中的条目数。”有见地!

但是,通过在操场上通过Option +单击.count()方法,我们可以获得更多信息。

线索! 显然.count()包含一个{get}语句。 剧情变厚了……

在参考指南中窥探一下之后,结果发现.count()最初来自名为ABMultiValue的类:

此外,“多值列表中的每个值必须具有相同的类型,并且必须具有关联的预定义或用户定义的标签,以及唯一的标识符……此类的实例是不可变的,有关操纵多值内容的方法,请参阅ABMultableMultiValue。清单。”

苹果开发人员似乎创建了一对专门用于容纳Array类型的类:一个用于更改Array(使用.insert(newElement :, at :)和.remove(at :)之类的方法)和一个用于分析Array类型的类。不可变数组(包含.count()之类的方法)。 实际上,ABMutableMultiValue实际上是继承自ABMultiValue,从而使其成为子类。

然而,这种揭示仅引起了另一个问题-这个ABMultiValue类从何而来? 通过跟踪其对源的继承,所有这些类最终都继承自NSObject:Apple所有事物的基础。

总而言之,Apple开发人员使用NSObject创建各种类来处理不同的属性,包括ABMultiValue来容纳可能具有多个值的属性。 当然,每次需要计数数组时,我们总是可以编写自己的代码:

但是似乎我们必须为每种类型的[String],[Int],[Double]和[etc]编写该代码。 取而代之的是,内置方法使我们能够利用函数而无需自行初始化它们。

在过去的编码天中,必须将所有不同的类导入其项目中才能访问方法。 这将包括Foundation,UIKit,还包括在用户的特定项目中创建的每个类。 导入可能占用数十行,并且可能导致易于出错的代码以及令人头疼的问题。 对我们来说幸运的是,xCode实际上在Swift标准库中内置了许多这些Objective-C / NSObject方法,因此在许多情况下,不需要导入框架!

尽管xCode为我们提供了许多一次性方法,但它们的捆绑式包装仍然有些不足。 如果您有一个经常调用的函数,或者根本不想重写它,那么实际上可以构建自己的个性化类并在需要时将其导入!

有关更多信息,请参见此处。 目前,我们感谢Swift标准库为我们提供了许多便捷的方法。