在Swift中定义许多相同的结构

假设您希望定义一系列看起来相同的结构。 例如:

并且假设您要避免代码重复

如果您使用的是类,则可以使它们成为同一类的所有子类 。 但是有充分的理由避免在Swift中使用子类。 特别是它们在通用协议一致性方面表现不佳,这是我完全避免在我的大多数代码中完全避免它们的一个原因。

您可以尝试使它们全部符合特定协议 ,但不能通过协议扩展添加存储的属性或初始化程序(可以添加初始化程序,但它需要调用另一个必需的初始化程序)。

这是一个不错的解决方案,并且为复杂的代码库提供了一个出奇的灵活解决方案:使用特定的类型参数将它们全部变成相同的通用结构,即使这些类型参数是空结构:

这些说明符类型称为“幻像类型”,它们出奇的强大。 这个想法也适用于更复杂的场景。 在下面的示例中, xy的类型变为通用类型,并且为每个结构分配了不同的静态名称。

或者,您可以使Unit成为Specifier本身的关联类型🙂