泛型与Any类型
2020-09-17 本文已影响0人
_莫忘初心
相同点:T 与 Any 都能用于定义接受两个不同类型参数的函数,都可以代表任何类型的值。
区别:T可以用于定义灵活的函数,类型检查仍然由编译器负责;Any类型则可以避开Swift的类型系统(所以应该尽可能避免使用)。
来个最简单的例子,一个函数,除了返回它的参数,其他什么都不做。
泛型:
func noOp<T>(x: T) -> T {
return x
}
Any类型:
func noOpAny(x: Any) -> Any {
return x
}
noOp 和 noOpAny 两者都将接受任意参数。
关键的区别在于我们所知道的返回值。在 noOp 的定义中,我们可以清楚地看到返回值和输⼊值完全⼀样。⽽ noOpAny 的例⼦则不太⼀样返回值是任意类型 ,甚⾄可以是和原来的输⼊值不同的类型。
任何调⽤ noOpAny 的函数都不知道返回值会被转换为何种类型。⽽结果就是可能导致各种各样的运⾏时错误。