【发布时间】:2021-10-13 04:57:14
【问题描述】:
假设我有 2 个 swift 协议:
protocol A: AnyObject {}
protocol B: A {}
在泛型函数上,我想检索传递的类型T 是否符合协议A:
func method<T>(_ type: T.Type) -> Bool {
return T.self is A.Protocol // A.Type fails always
}
在前一种方法中,如果我发送类型 A 一切正常,但如果我尝试发送符合 B 的类型,则会失败。由于 B 已经符合 A,因此预期结果将为真。
有没有办法实现这个逻辑?
提前致谢。
【问题讨论】:
-
...可以符合协议... 在运行时检查非常unswifty。写
method<T : A>然后你在编译时得到检查 -
A.Type应该在这里工作。你能显示minimal reproducible example 的A.Type失败吗?无论如何,为什么不在编译时检查它(见乔治的回答)? -
是的,我已经检查了 Georges 的答案(并添加了评论)如果您尝试传递符合 A 或 B 的类类型,一切正常,但假设您想将协议 B 作为类型传递, 乔治的回答行不通