理解函数中的泛型 & 泛型约束 —— 究竟谁才是入口?

继续接上篇,做完 AnyMyCollection 之后,

我又添加了一个扩展来修改 CustomCollection 在特定类型下的行为:

1
2
3
4
5
extension CustomCollection where Element == Int {
func allValues() -> [Element] {
[4, 5, 6]
}
}

ElementInt 时,不管三七二十一,直接返回 [4, 5, 6]

但是,运行是发现了这样的现象:

1
2
3
4
5
let collection = CustomCollection(1, 2, 3)
print(collection.allValues()) // [4, 5, 6]

let any = AnyMyCollection(collection)
print(any.allValues()) // [1, 2, 3]
阅读更多
Swift 中的类型擦除(下)—— 从模仿中学习

Swift 中的类型擦除(下)—— 从模仿中学习

上篇博客中,我们初步了解了为什么需要一个 Type Eraser ,

也分享了一个简单实现 Type Erasure 的方案。

为了更加深入了解类型擦除,我们还是得来看看 Swift 自带的一些 Type Eraser 是如何实现的。

目标是:理解一下其基本思路,并且仿制一个出来。

阅读更多