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

swift – 检查类是否符合协议

发布时间:2020-12-14 05:45:27 所属栏目:百科 来源:网络整理
导读:我试图在swift中为我们的应用程序创建一个简单的依赖注入系统,现在为期2天.我对任何解决方案都很灵活,但我想要一些东西,所以我可以说“给我一个符合这个协议的实例”,只要它符合所述协议,返回的实际类型就可以是任何东西.我已经尝试了很多东西,包括泛型,但设
我试图在swift中为我们的应用程序创建一个简单的依赖注入系统,现在为期2天.我对任何解决方案都很灵活,但我想要一些东西,所以我可以说“给我一个符合这个协议的实例”,只要它符合所述协议,返回的实际类型就可以是任何东西.我已经尝试了很多东西,包括泛型,但设法弄清楚那不能(?)真的有用,所以现在我已经完成了基本的工作,如下所示:
protocol AProtocol {

}

class AClass: AProtocol {

} 

class MyDiThing {
    public static func objectConformingTo(aProtocol: Any) -> Any? {
        // And here I want to do something like
        if AClass is aProtocol {
            return AClass()
        }
        return nil
    }
}

// The calling code ..
let aObject = MyDIThing.objectConformingTo(AProtocol)

我知道,它并不漂亮,但是现在我不是那么挑剔性能/坏代码,只要它解决了解耦问题(最好能包含在MyDIThing类中).如果这是不可能的,我会对其他解决方案持开放态度.我使用了类似于objective-c的解决方案并取得了很好的成功,只需要一个字符,其中键是NSStringFromProtocol,值是类,使用入站协议下载字典并实例化类.超级简单.在快速,感觉不可能!

如果您导入obj-c,那么您可以执行以前的操作.

否则,这很难,因为协议不以相同的方式存在.考虑为您的工厂注册基于系统.您的每个类都会通过提供一个函数或闭包来注册自己,该函数或闭包可以被调用以返回该类的新实例,并且注册是针对字符串或其他类型的标识符.这是一个拥有协议类型的好地方,但是在obj-c中你通过字符串转换实际上做了同样的事情.您可以注册任何Equatable以保持非常通用的东西.

(编辑:李大同)

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

    推荐文章
      热点阅读