加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:01:24 所属栏目:百科 来源:网络整理
导读:我有一个协议,我定义如下: protocol MyProtocol { ...} 我也有一个通用结构: struct MyStruct T { ...} 最后我有一个通用的功能: func myFunc T (s: MyStructT) - T? { ...} 我想测试内部的函数,如果类型T符合MyProtocol。基本上我想要能够做(?pseudoco
我有一个协议,我定义如下:
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
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读