Reflection 如何动态测试自类型和不相关类型

Reflection 如何动态测试自类型和不相关类型,reflection,swift,Reflection,Swift,我可以用Swift写: func id(_: Any) -> Int? { return nil } func id<T: Hashable>(hashable: T) -> Int? { // Weird, what's T needed for? Why not "func id(hashable: Hashable) -> Int? {"? return hashable.hashValue } func id(object: AnyObjec

我可以用Swift写:

func id(_: Any) -> Int? {
    return nil
}
func id<T: Hashable>(hashable: T) -> Int? { // Weird, what's T needed for? Why not "func id(hashable: Hashable) -> Int? {"?
    return hashable.hashValue
}
func id(object: AnyObject) -> Int? {
    return reflect(object).objectIdentifier?.hashValue
}
问题是这两个案子让。。。as…:'行被编译器拒绝。两行都有错误:

  • 从“任意”向下转换为不相关类型
此外,第一行有错误:

  • 协议“Hashable”只能用作泛型约束,因为它具有自身或关联的类型要求
这些错误对我来说似乎有点约束,因为我正在测试一个类型,而不是无条件地强制转换到一个类型

有什么提示我可以写这个吗

提前谢谢,--霍华德。

根据

只有当您的协议被标记为@objc属性时,您才能检查协议的一致性


Hashable
AnyObject
不是@objc协议,因此您尝试执行的操作似乎不受支持。

是的,动态功能目前受到限制。我希望有人能想出一个好办法:)哎呀,意思是说任何对象都有@objc的属性,但它仍然被拒绝:(.但我完全同意Hashable永远不会起作用。这篇文章是为了挑选集体的大脑,看看我是否遗漏了什么。
func dynamicId(anything: Any) -> Int? {
    switch anything {
    case let hashable as Hashable:
        return hashable.hashValue
    case let object as AnyObject:
        return reflect(object).objectIdentifier?.hashValue
    }
    return nil
}