【发布时间】:2021-11-10 17:09:41
【问题描述】:
当我试图确定一个类型是否符合协议时,我得到一个错误:
Protocol 只能用作泛型约束,因为它具有 Self 或关联的类型要求
这是我的代码的简化版本:
protocol FooProtocol {
static func combine(foo: Self, with element: Any) -> Self
}
func combine<T>(foo: T, with element: Any) -> T? {
if let F = T.self as? FooProtocol.Type { // Error in here
return F.combine(foo: foo, with: element)
} else {
return nil
}
}
我知道我可以这样做:
func combine<T: FooProtocol>(foo: T, with element: Any) -> T {
return T.combine(foo: foo, with: element)
}
但这不是我需要的,我需要的是你可以调用任何类型的combine(foo:with:)函数,如果这个类型不符合FooProtocol那么nil会被返回。
谢谢!
【问题讨论】:
-
您不需要运行时检查。只需做两个重载。
-
什么意思?