比较swift中的文字类型失败?

此代码的作品是Swift 3:

let a = 1
type(of: a) == Int.self // true

但是,显然这个代码失败了:

// error: binary operator '==' cannot be applied to two 'Int.Type' operands
type(of: 1) == Int.self

进行第二次比较的语法是什么?

非常感谢。


我认为错误信息是误导性的。 真正的问题是如何在第二次调用中解释文字1 。 当你定义一个变量时,Swift默认为一个Int

let a = 1 // a is an Int

但编译器可以根据上下文将其读取为DoubleUInt32CChar等。

func takeADouble(value: Double) { ... }
func takeAUInt(value: UInt) { ... }

takeADouble(value: 1) // now it's a Double
takeAUInt(value: 1)   // now it's a UInt

type(of:)被定义为一个通用函数:

func type<Type, Metatype>(of: Type) -> Metatype

编译器不知道如何解释Type泛型参数:它应该是IntUIntUInt16等吗? 以下是我从IBM Swift Sandbox获得的错误:

Overloads for '==' exist with these partially matching parameter lists
(Any.Type?, Any.Type?), (UInt8, UInt8), (Int8, Int8),
(UInt16, UInt16), (Int16, Int16), (UInt32, UInt32), ...

你可以告诉coompiler一些帮助,告诉它它是什么类型的:

type(of: 1 as Int) == Int.self
链接地址: http://www.djcxy.com/p/95827.html

上一篇: Comparing type of literal in swift fails?

下一篇: C# DateTimePicker DataBinding Parse event not working