Swift 泛型:从约束到子类型的全面解析
1. 泛型约束与特化
在编程中,我们常常会遇到需要处理多种类型数据的情况。泛型就是解决这类问题的强大工具,但有时候泛型需要一些约束来实现特定的功能。
1.1 约束泛型函数
假设我们有一个 lowest 函数,用于找出数组中的最小值。最初的实现可能是这样的:
// Before. Didn't compile.
func lowest<T>(_ array: [T]) -> T? {
}
然而,这个函数无法编译,因为 T 类型不一定是可比较的。为了解决这个问题,我们可以对 T 进行约束,使其符合 Comparable 协议:
// After. The following signature is correct.
func lowest<T: Comparable>(_ array: [T]) -> T? {
let sortedArray = array.sorted { (lhs, rhs) -> Bool in
return lhs < rhs
}
return sortedArray.first
}
简化后的代码如下:
超级会员免费看
订阅专栏 解锁全文
15

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



