泛型与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 的函数都不知道返回值会被转换为何种类型。⽽结果就是可能导致各种各样的运⾏时错误。

上一篇下一篇

猜你喜欢

热点阅读