我想编写一个函数,它接受一个对象和一个类型作为参数,并返回一个布尔值,指示该对象是否属于给定的类型。似乎没有“Type”类型,因此我不确定如何执行此操作。我所能做到的最好的就是:
我可以使用
我将尝试验证一个
func objectIsType<T>(object: AnyObject, someObjectOfType: T) -> Bool {
return object is T
}
我可以使用
objectIsType(x, 5)
来测试 x
是否为 Int
,或者使用 objectIsType(x, "hi")
来查看是否为字符串,但我希望能够调用 objectIsType(x, Int)
来查看是否为 Int
,并使用 objectIsType(x, String)
来查看是否为 String
。这种情况是否可能?
编辑:
Airspeed Velocity 改进了我的函数,并指出它正好做了 is
已经实现的功能。新函数如下:
func objectIsType<T>(object: Any, someObjectOfType: T.Type) -> Bool {
return object is T
}
我将尝试验证一个
[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
。我已经查看了元类型文档,但我还是有点困惑。
AnyObject
是很危险的。x
将从Int
转换为NSNumber
,因此objectIsType(5 as Int, 5 as Double) == true
。 - Brian Nickel