Swift 中的简单容器绑定?

Posted

技术标签:

【中文标题】Swift 中的简单容器绑定?【英文标题】:Simple container bindings in Swift? 【发布时间】:2018-03-16 13:17:14 【问题描述】:

免责声明:我还在学习 Swift,如果我不了解 Swift 的某些概念/功能/限制,请见谅。

使用 Swinject 框架,如果您想将协议绑定到类 - 似乎您必须在闭包中返回类实例,例如:

container.register(Animal.self)  _ in Cat() 

是否可以改为将两种类型传递给register() 方法并让框架为您实例化该类?当然,它需要递归地查看该类是否具有任何初始化程序依赖项(控制反转)。

这在 php 世界中是可能的,因为您有反射的概念,它允许您获取依赖项的类类型,允许您即时实例化它们。不知道 Swift 有没有这个能力?

这样写会更好:

container.register(Animal.self, Cat.self)

这还允许您从容器中解析任何类并解决它的依赖关系(无需手动注册类):

container.resolve(NotRegisteredClass.self)

注意:这仅对不将标量类型作为依赖项的类有意义(因为它们当然需要明确给出)。

【问题讨论】:

【参考方案1】:

第二种情况——在没有显式注册的情况下解析类型——目前是不可能的,因为 Swift 对反射的支持非常有限。

但是,有一个 SwinjectAutoregistration 扩展名,可以让您编写非常接近您的第一个示例的内容:

container.autoregister(Animal.self, initializer: Cat.init)

【讨论】:

太棒了,这看起来很不错!希望 Swift 能够支持更多的反射功能——它是一种可爱的语言

以上是关于Swift 中的简单容器绑定?的主要内容,如果未能解决你的问题,请参考以下文章

UIView 容器中的 Swift-UICollectionView

ios将UIControlEventTouchUpInside绑定到容器不会使容器中的视图响应事件

嵌入在容器中的 Swift 表格视图

在 Swift 中访问共享容器中的自定义对象

将数据从容器视图中的 tableview 中的静态单元格发送到 Swift 中的视图控制器

swift 存放多类型的容器