我正在嘗試在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方法。效果很好。 –