美文网首页
swift中泛型和 Any 类型

swift中泛型和 Any 类型

作者: li二彩 | 来源:发表于2018-11-14 22:48 被阅读85次

除了泛型,Swift 还支持 Any 类型,它能代表任何类型的值。从表面上看,这好像和泛型极其相似。Any 类型和泛型两者都能用于定义接受两个不同类型参数的函数。然而,理解两者之间的区别至关重要:泛型可以用于定义灵活的函数,类型检查仍然由编译器负责;而 Any 类型则可以避开 Swift 的类型系统 (所以应该尽可能避免使用)。

让我们考虑一个最简单的例子,构想一个函数,除了返回它的参数,其它什么也不做。如果使用泛型,我们可能写为下面这样:

func noOp<T>(x: T) -> T {
   return x
}

而使用 Any 类型,则可能写为这样:

func noOpAny(x: Any) -> Any {
   return x
}”

“noOp 和 noOpAny 两者都将接受任意参数。关键的区别在于我们所知道的返回值。在 noOp 的定义中,我们可以清楚地看到返回值和输入值完全一样。而 noOpAny 的例子则不太一样,返回值是任意类型 — 甚至可以是和原来的输入值不同的类型。我们可以给出一个 noOpAny 的错误定义,如下所示:

func noOpAnyWrong(x: Any) -> Any {
       return 0
}

使用 Any 类型可以避开 Swift 的类型系统。然而,尝试将使用泛型定义的 noOp 函数返回值设为 0 将会导致类型错误。此外,任何调用 noOpAny 的函数都不知道返回值会被转换为何种类型。而结果就是可能导致各种各样的运行时错误。”

相关文章

  • swift中泛型和 Any 类型

    除了泛型,Swift 还支持 Any 类型,它能代表任何类型的值。从表面上看,这好像和泛型极其相似。Any 类型和...

  • 2021-12-01

    swift5基本语法-泛型函数和泛型类型 Swift中泛型可以将类型参数化,提高代码复用率,减少代码量。 一、泛型...

  • Swift 的泛型与 Any

    在 Swift 中,泛型 和 Any 都能用于定义接受不同类型的参数,在一些代码中,会同时定义 foo(a: T,...

  • 【Swift进阶笔记】泛型

    泛型类型 可选类型是泛型 Array, Dictionary, Set也是泛型,如果不指定类型,系统默认为Any类...

  • Swift-泛型笔记

    Swift 泛型 Swift 提供了泛型让你写出灵活且可重用的函数和类型。 Swift 标准库是通过泛型代码构建出...

  • Swift和OC的区别

    Swift和OC的区别? 1、Swift没有地址和指针的概念 2、Swift对数据类型要求极为严谨 3、泛型,泛型...

  • swift中的泛型、Any和AnyObject

    我们都知道泛型、Any和AnyObject都是用于表示类型的随意性,甚至还有OC中的id类型,但是它们具体有什么不...

  • 【Swift】泛型常见使用

    1、Swift泛型4种 泛型函数泛型类型泛型协议泛型约束 2、泛型约束3种 继承约束:泛型类型 必须 是某个类的子...

  • Swift 泛型之条件性符合协议

    Swift 泛型条件性符合(Conditional conformances) 表示泛型类型只有在其类型参数满足某...

  • 泛型

    Swift 提供了泛型让你写出灵活且可重用的函数和类型。Swift 标准库是通过泛型代码构建出来的。Swift 的...

网友评论

      本文标题:swift中泛型和 Any 类型

      本文链接:https://www.haomeiwen.com/subject/tlwsfqtx.html