通用Swift函数来测试对象类型

我正在尝试编写一个函数,它将一个对象和一个类型作为参数,并返回一个布尔值,指示该对象是否属于给定类型。 似乎没有Type类型,所以我不知道如何做到这一点。 我能做的最好的是

func objectIsType(object: AnyObject, someObjectOfType: T) -> Bool { return object is T } 

所以我可以做objectIsType(x, 5) ,来测试xInt还是objectIsType(x, "hi") ,看看它是否是一个字符串,但我希望能够调用objectIsType(x, Int)查看x是否为IntobjectIsType(x, String)以查看它是否为String 。 这样的事情可能吗?

编辑:

Airspeed Velocity改进了我的function,并为它做了一件非常重要的事情。 新function是这样的:

 func objectIsType(object: Any, someObjectOfType: T.Type) -> Bool { return object is T } 

我要做的是validation[String: Any]字典的值是否符合我期望的类型。 例如:

 let validator: [String: Any.Type] = [ "gimme an int": Int.self, "this better be a string": String.self ] let validatee: [String: Any] = [ "gimme an int": 3, "this better be a string": "it is!" ] for (key, type) in validator { if !objectIsType(validatee[key], type) { selfDestruct() } } 

但我收到错误, protocol.Type is not convertible to T.type 。 我看过Metatype文档,但我仍然有点困惑。

如果要提供类型作为参数而不是值,则可以执行以下操作:

 func objectIsType(object: Any, someObjectOfType: T.Type) -> Bool { return object is T } let a: Any = 1 objectIsType(a, Int.self) // returns true 

注意, AnyObject只能引用类,而不是结构或枚举。 IntString是结构。 如果你改变你的代码,就像我上面所说的那样,取一个Any ,它也适用于结构。

它可能看起来像你的原始工作没有这个改变,但真正发生的是互操作将你的Int转换为NSNumber ,这是一种迂回的做事方式,不会适应基于元类型的方法。

但问题是,为什么你认为你需要这个? 已经做到了这一点。