泛型 – Swift:检查泛型类型是否符合协议

前端之家收集整理的这篇文章主要介绍了泛型 – Swift:检查泛型类型是否符合协议前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个协议,我定义如下:
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,并使用==而不是。到目前为止我还没有到任何地方。有任何想法吗?

有点晚,但你可以测试是否有一些响应协议为?测试:
if 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
}
原文链接:https://www.f2er.com/swift/320888.html

猜你在找的Swift相关文章