首页 > 解决方案 > Swift中的Something.self与self.something

问题描述

我明白那个

self.something

这是该类的成员值。但什么是

something.self

标签: swift

解决方案


考虑像这样的代码

JSONDecoder().decode(what, from: myJSONData)

我有什么去哪里what?我们必须告诉解码器期望解码什么类型的东西。基本上,what类型的名称——符合 Decodable 的类、结构或枚举的名称。

但是如何说出一个类型的名字呢?假设您希望解码的事物类型是字符串。那你在这里说什么呢?

JSONDecoder().decode(String, from: myJSONData) // error

不,你不能像那样突然说出一种类型的名称。这就是你的做法:

JSONDecoder().decode(String.self, from: myJSONData)

当您说String.self的是String的元类型时,您真正传递的是这里。而这个例子正是它的用途,即当您需要将类型作为参数传递时。

此方法的声明通过使用以下方式发出信号.Type

func decode<T>(_ type: T.Type, from data: Data) throws -> T where T : Decodable

该表达式T.Type告诉您调用此方法时传递的内容应该是Something.self.


推荐阅读