泛型 – 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
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...