Swift 泛型与协议:深入解析与应用实践
1. Swift 泛型的不变性与协变性
1.1 泛型的不变性
在 Swift 中,泛型具有不变性。这意味着即使一个泛型类型包装了一个子类,它也不会成为包装其父类的泛型类型的子类型。例如:
refreshCache(Cache<OnlineCourse>()) // 这是允许的
refreshCache(Cache<SwiftOnTheServer>()) // 错误: 无法将 'Cache<SwiftOnTheServer>' 类型的值转换为预期的参数类型 'Cache<OnlineCourse>'
这表明,尽管 SwiftOnTheServer 可能是 OnlineCourse 的子类,但 Cache<SwiftOnTheServer> 不能被视为 Cache<OnlineCourse> 的子类型。
1.2 标准库泛型的协变性
然而,Swift 标准库中的一些泛型类型,如 Array 和 Optional ,是协变的。这意味着泛型类型可以是其他泛型类型的子类型。例如:
func readOptionalCourse(_ value: Optional<Onli
超级会员免费看
订阅专栏 解锁全文
373

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



