【发布时间】:2017-10-24 01:31:58
【问题描述】:
我正在尝试编译以下代码。 基本上我希望对象符合多种协议,例如将不同组 API 暴露给应用程序不同部分的网络服务(例如:登录 API 到 loginController,共享 API 到 shareController)
+
我希望使用 networkXProvider 协议注入此服务,例如实现依赖注入(例如我想向 LoginController 传递一个采用 LoginControllerProvider 和 FetchingUsersFromDBProvider 的注入):
protocol MyAccountCommunicator {
func getAccountData() -> String
}
protocol EventsCommunicator {
func getEvents() -> String
}
class NetworkManager: MyAccountCommunicator, EventsCommunicator {
func getAccountData() -> String {
return "Accounts"
}
func getEvents() -> String {
return "Events"
}
}
protocol MyAccountCommunicatorProvider {
var networkCommunicator: MyAccountCommunicator { get }
}
protocol EventsCommunicatorProvider {
var networkCommunicator: EventsCommunicator { get }
}
class Injector: MyAccountCommunicatorProvider, EventsCommunicatorProvider {
var networkCommunicator: NetworkManager = NetworkManager()
}
Playground 失败并出现以下错误:
错误:strings.playground:29:7:错误:类型“注射器”没有 符合协议'MyAccountCommunicatorProvider'类注入器: MyAccountCommunicatorProvider,EventsCommunicatorProvider { ^
strings.playground:30:9: 注意:候选人的类型不匹配 '网络管理员' var networkCommunicator: NetworkManager = NetworkManager() ^
错误:strings.playground:29:7:错误:类型“注射器”没有 符合协议'EventsCommunicatorProvider'类注入器: MyAccountCommunicatorProvider,EventsCommunicatorProvider { ^
strings.playground:30:9: 注意:候选人的类型不匹配 '网络管理员' var networkCommunicator: NetworkManager = NetworkManager()
环境:swift4、XCode9
【问题讨论】:
标签: swift dependency-injection protocols