我有一个协议,我定义如下:
protocol MyProtocol { ... }
我也有一个通用结构:
struct MyStruct <T> { ... }
最后我有一个通用的功能:
func myFunc <T> (s: MyStruct<T>) -> T? { ... }
我想测试内部的函数,如果类型T符合MyProtocol。基本上我想要能够做(〜pseudocode):
let conforms = T.self is MyProtocol
但这会抛出一个编译错误:
error: cannot downcast from 'T.Type' to non-@objc protocol type 'MyProtocol' let conforms = T.self is MyProtocol ~~~~~~ ^ ~~~~~~~~~~
我也尝试了变体,如T.self是MyProtocol.self,T是MyProtocol,并使用==而不是。到目前为止我还没有到任何地方。有任何想法吗?
有点晚,但你可以测试是否有一些响应协议为?测试:
原文链接:https://www.f2er.com/swift/320888.htmlif let currentVC = myViewController as? MyCustomProtocol { //currentVC responds to the MyCustomProtocol protocol =] }
编辑:有点较短:
if let _=self as? MyProtocol { // match }
和使用警卫
guard let _=self as? MyProtocol else { // doesn't match return }