我正在尝试在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,值是类,用入站协议为字典下标并实例化类。超级简单。迅速感觉不可能!
'if let foo = bar as? MyProtocol {/ * bar符合协议...... foo是MyProtocol类型,并且可以调用方法* /}' – nhgrif
我最终使用enum作为键和闭包作为值来执行基于注册的swift方法。效果很好。 –