swift 中的 T.Type 是什么

2023-12-23

谁能告诉我什么是T.Type当我使用JSONDecoder().decode()?

我认为它是解码我编码的数据的类型。

很多例子都使用上面的方法,如下所示:

JSONEncoder().decode([People].self, from: data)

如果我检查该方法的定义我可以看到T.Type.

我知道泛型但什么是T.Type?

只是有什么区别T and T.Type?

当我们声明一些变量时,我们像这样分配它们的类型

var someValue: Int , not var someValue: Int.self

是什么T.Type完全并且Type.self?


  • T.Type用于参数和约束中,表示“事物本身的类型,而不是事物的实例”。

    例如:

    class Example {
        static var staticVar: String { return "Foo" }
        var instanceVar: String { return "Bar" }
    }
    
    func printVar(from example: Example) {
        print(example.instanceVar)  // "Bar"
        print(example.staticVar) // Doesn't compile, _Instances_ of Example don't have the property "staticVar"
    }
    
    func printVar(from example: Example.Type) {
        print(example.instanceVar)  // Doesn't compile, the _Type_ Example doesn't have the property "instanceVar"
        print(example.staticVar) // prints "Foo"
    }
    
  • 您将获得对 Type 的引用.Type(类型对象本身)在运行时通过致电TheType.self。语法TheType.Type在类型声明和类型签名中使用仅向编译器指示实例与类型的区别。例如,您实际上无法获得参考,Int在运行时或通过调用在函数实现中的类型Int.Type。你会打电话Int.self

  • 在示例代码中var someValue: Int,具体记号identifier: Type(在这种情况下,someValue: Int) meanssomeValue 将是instance的国际。如果您希望 someValue 成为对实际类型 Int 的引用,您可以编写var someValue: Int.Type = Int.self请记住,.Type表示法仅在向编译器声明类型和类型签名时使用,并且.self属性在实际代码中用于在执行时检索对类型对象本身的引用。

  • 之所以JSONDecoder().decode需要一个参数T.Type (where T符合Decodable)是因为任何type符合Decodable有一个初始化程序init(from decoder: Decoder). The decode方法将需要调用此 init 方法type符合Decodable,不在instance的类型符合Decodable。例如:

    var someString: String = ""
    someString.init(describing: 5) // Not possible, doesn't compile. Can't call an initializer on an _instance_ of String
    var someStringType: String.Type = String.self
    someStringType.init(describing: 5) // Iniitializes a String instance "5"
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

swift 中的 T.Type 是什么 的相关文章

随机推荐

  • 为 xcode 9 创建 gdal 静态库(libgdal.a)

    我需要创建一个 gdal 静态库 libgdal a 才能在 iOS 中使用它 我尝试过这个脚本将 GDAL OGR 合并到 iOS 项目中 快速指南 https stackoverflow com questions 12643898 i
  • php中的类和函数有什么区别? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我自己使用了以下代码 它们都给出了相同的结果 那么为什么我们使用类而不是普通函数 类和函数有什么区别
  • 如何检索 .NET 运行时生成的所有封闭泛型类型的列表?

    根据 MSDN 文档 NET 运行时将根据需要根据泛型类型定义动态生成封闭类型 https msdn microsoft com en us library f4a6ta2h aspx https msdn microsoft com en
  • 使用 Spring Data Elasticsearch 定义自定义日期格式和转换器

    我目前正在从 Spring Data Elasticsearch 3 2 x 迁移到 4 0 0 我正在删除一个JacksonEntityMapper 定义了一个自定义ZonedDateTimeDeserializer 使用Elastics
  • 30 秒定期任务轮询外部 Web 服务和缓存数据

    我正在寻求一些关于从 Domino 服务器端操作每 30 秒轮询一次外部 Web 服务的建议 快速了解一下背景 我们通过 TomTom API 跟踪汽车的位置 我们现在需要在我们的网络应用程序中显示这一点 覆盖到地图 谷歌 必应等 上 并与
  • 在 Haskell 中按长度过滤列表项

    我有一个像这样的清单 a ab abc abcd 如何获取仅包含长度 gt 2 的项目的列表 意味着结果是 abc abcd 娜塔莉的答案是完全正确的 但作为替代形式 你也可以将其写为 filter gt 2 length a ab abc
  • 如何使用moment js日历获取点击特定日期的事件名称..?

    我正在将日历集成到一个项目中 使用momentjs 我想根据日期选择显示事件名称 让我举一个例子 如果我选择日期 2018 04 01 当时我想显示自定义事件名称 这是我的 JavaScript 代码 Have this somewhere
  • iPhone 上的 OpenGL ES 2.0:GL_POINT_SMOOTH 使用 ES 2.0 绘制正方形,但适用于 ES 1.0

    我正在尝试使用顶点缓冲区对象来绘制圆 并在 iPhone 上的 OpenGL ES 2 0 中启用 GL POINT SMOOTH 来绘制点 我使用以下 ES 1 0 渲染代码在 iPhone 4 上成功绘制圆圈 glVertexPoint
  • JBoss 7:JNDI 查找

    一段时间后 我远程访问了在 JBoss 7 1 1 下运行的无状态 EJB 使用属性对象 Properties jndiProps new Properties jndiProps put Context INITIAL CONTEXT F
  • Windows镜像如何使用Dockerfile的ARG指令

    我想在 dockerfile 中传递一个参数来构建我的 docker 映像 我在其他帖子和 Docker 手册中看到了如何执行此操作 但在我的情况下不起作用 这是我使用我的论点的代码摘录 ARG FirefoxVersion RUN pow
  • 在 Symfony2 中访问与 Bundle 相关的文件

    在 Symfony2 应用程序的路由配置中 我可以引用如下文件 somepage prefix someprefix resource SomeBundle Resources config config yml 有什么方法可以访问控制器或
  • libphp5.so 缺失

    我使用以下命令安装了 php 5 2 17 configure make make install 安装顺利 但我找不到 libphp5 so 文件 任何人都可以建议我出了什么问题以及如何修复此错误 尝试 libapache2 mod ph
  • 如何使用 mongoexport 导出排序数据?

    我在 mongo 中有一个集合 其中包含名称和计数字段 name myName count 5 是否可以使用 mongoexport 按计数对数据进行排序并导出为 json 从 MongoDB 2 6 开始 您可以通过 sort to mo
  • 使用 标签代替 图标有哪些优点/缺点?

    Facebook 的 HTML 和 Twitter Bootstrap HTML v3 之前 都使用 i 标签来显示图标 然而 从HTML5 规范 http www w3 org International questions qa b a
  • 使用 F# 中的 Applicative 功能构建记录

    假设有一个type r A int B string C int D string 和一些值 let aOptional int option let bOptional string option let cOptional int op
  • 相当于张量流中的 numpy.digitize

    我正在研究一个使用的自定义损失函数numpy digitize 内部 对于一组参数 损失最小化bins数字化方法中使用的值 为了使用tensorflow优化器 我想知道是否有等效的实现digitize in tensorflow 如果没有
  • Google 图表背景颜色不适用于示例代码

    我使用的代码来自示例页面 https developers google com chart interactive docs gallery barchart创建水平条形图 选项backgroundColor适用于其他图表类型 例如thi
  • MooTools 的 Function.prototype.overloadSetter() 是做什么的?

    我正在浏览 MooTools 源代码来尝试理解它 implement and extend 公用事业 每个的定义指的是这样定义的函数 var enumerables true for var i in toString 1 enumerab
  • 禁用 RStudio 中的所有断点

    有没有办法禁用 RStudio 中的所有断点 我查看了 RStudio 文档并进行了谷歌搜索 但找不到方法 我也很好奇 特别想了解断点的概述 I ran grep在我的项目文件夹中 这是我发现的 首先 打开 RStudio 后 断点不会显示
  • swift 中的 T.Type 是什么

    谁能告诉我什么是T Type当我使用JSONDecoder decode 我认为它是解码我编码的数据的类型 很多例子都使用上面的方法 如下所示 JSONEncoder decode People self from data 如果我检查该方