Swift 泛型与协议的深度解析与应用
1. 泛型实例的类型一致性
在使用泛型实例时,后续所有与之的交互都必须为其占位符使用相同的类型。这是泛型的一大优势,编译器会帮助我们确保这一点。例如,如果创建了一个特定类型的实例,却意外地将其当作不同类型使用,编译器会阻止这种操作。而在许多其他编程语言(如苹果之前的 Objective - C)中,并没有这种保护机制。
当尝试用空数组初始化一个泛型集合时,会遇到问题。示例代码如下:
var emptySet = Bag(elements: []) // Argument for generic
// parameter 'ElementType' could not be inferred
这里会出现错误,因为编译器无法确定要为泛型占位符分配的类型。解决方法是为赋值的变量显式指定类型:
var emptySet: Bag<String> = Bag(elements: [])
编译器不仅能根据传入的变量确定泛型占位符的类型,还能根据使用结果的方式来确定类型。
2. 类型约束
为了编写能够处理任何符合 Container 协议类型的泛型函数,需要使用类型约束。
2.1 协议约束
假设要编写一个函数,通过相等性检查来确定实例在数组中的索引。最初的尝试可能如下:
超级会员免费看
订阅专栏 解锁全文
8

被折叠的 条评论
为什么被折叠?



