swift - Swift 泛型类型检查协议一致性
问题描述
假设我有 2 个快速协议:
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,因此预期结果将为真。
有没有办法实现这个逻辑?
提前致谢。
解决方案
这是实现此目的的一种方法:
protocol A: AnyObject {}
protocol B: A {}
func method<T>(_ type: T.Type) -> Bool {
return false
}
func method<T: A>(_ type: T.Type) -> Bool {
return true
}
class Temp1: A {}
class Temp2: B {}
class Temp3 {}
print(method(Temp1.self)) // true
print(method(Temp2.self)) // true
print(method(Temp3.self)) // false
编写两个相同的方法,除了一个有泛型<T>
,另一个是<T: A>
。在此示例中,Temp1
andTemp2
将使用该<T: A>
方法,而Temp3
将仅使用该<T>
方法,因为它不符合A
.
推荐阅读
- bash - Bash - 处理变量中的(单)引号(用于 Curl 命令)
- python-3.x - Discord Python bot 在语音频道中创建活动成员文件
- java - jNetPcap 的 UnsatisfiedLinkError
- turing-machines - 如何为以下语言构建图灵机?
- r - 如何在 Wordpress 上嵌入 RMarkdown(以 html 格式)
- redis - Redis 反向模式匹配
- ios - UIPageViewController Delegate 方法仅在第一次调用
- python - 如何从我的 python 代码创建独立程序(在 linux 上)?
- html - 当我在 blazor 中选择一个选项时如何执行代码
- javascript - Gatsby GraphQL 自定义日期格式字符串