Swift中如何比较类型?为何使用===比较类型会报错?
报错的核心原因
=== 是Swift内置的类实例恒等运算符,仅支持对比两个引用是否指向同一个类实例,参数要求必须是类类型、或者带有类约束的泛型类型。触发的编译报错,本质就是参与对比的元类型不满足这个运算符的约束:
- 代码里声明的
m、n是Swift的整数结构体(属于值类型),type(of:)返回的Int.Type是值类型元类型,不满足===要求的类约束,因此无法直接使用该运算符对比。 - Swift中的
String同样是结构体(值类型)而非类,报错信息里提到的String.Type不符合类约束要求就是这个原因,因此String === String也会触发编译失败。
Swift中正确的类型比较方法
Swift为所有元类型(无论值类型元类型、还是类类型元类型)都实现了Equatable协议支持,直接使用等于运算符==即可完成类型的相等性判断:
- 对比两个变量的类型,直接将原有代码改写为:
type(of: m) == type(of: n)
示例中m和n都是Int类型,该表达式会返回true。
- 之前报错的
String === String改写为String == String即可正常执行,返回true。
如果仅需要判断某个实例是否属于特定类型,也可以直接使用is关键字简化逻辑,比如判断m是否为整数类型可直接写m is Int,无需单独取出元类型再做对比。
内容的提问来源于stack exchange,提问作者F. Zer
相关产品推荐
相关产品推荐

