You need to enable JavaScript to run this app. Swift中如何比较类型?为何使用===比较类型会报错?
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.04 05:06:09