我正在努力使下面的代码编译。基本上,我希望有符合多个协议的对象,例如,将不同组API暴露给应用程序不同部分的网络服务(例如:登录API到loginController,共享API到shareController)。
+
我希望使用networkXProvider协议注入该服务,例如实现依赖注入(例如,我希望将采用LoginControllerProvider和FetchingUsersFromDBProvider的注入传递给LoginController ):
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()
}操场发生故障,错误如下:
错误: strings.playground:29:7:错误:类型'Injector‘不符合协议'MyAccountCommunicatorProvider’类喷射器: MyAccountCommunicatorProvider,EventsCommunicatorProvider {^ strings.playground:30:9:注意:候选人具有非匹配类型' NetworkManager‘var networkCommunicator: NetworkManager= NetworkManager() ^ 错误: strings.playground:29:7:错误:类型'Injector‘不符合协议' EventsCommunicatorProvider’类喷射器: MyAccountCommunicatorProvider,EventsCommunicatorProvider{^ strings.playground:30:9:注意:候选人具有非匹配类型' NetworkManager‘var networkCommunicator: NetworkManager= NetworkManager()
环境: swift4,XCode9
发布于 2017-10-24 02:43:38
为什么需要MyAccountCommunicatorProvider和EventsCommunicatorProvider协议?如果你把它们组合成一个呢?
protocol CommunicatorProvider {
var networkCommunicator: NetworkManager { get }
}
class Injector: CommunicatorProvider {
var networkCommunicator = NetworkManager()
}发布于 2017-10-24 04:20:40
protocol MyAccountCommunicator {
func getAccountData() -> String
}
protocol EventsCommunicator {
func getEvents() -> String
}
protocol MyAccountCommunicatorProvider {
var accountCommunicator: MyAccountCommunicator { get }
}
protocol EventsCommunicatorProvider {
var eventCommunicator: EventsCommunicator { get }
}
class NetworkManager: MyAccountCommunicator, EventsCommunicator {
func getAccountData() -> String {
return "Accounts"
}
func getEvents() -> String {
return "Events"
}
}
class Injector: MyAccountCommunicatorProvider, EventsCommunicatorProvider {
var networkManager = NetworkManager()
var accountCommunicator: MyAccountCommunicator {
return networkManager
}
var eventCommunicator: EventsCommunicator {
return networkManager
}
}发布于 2017-10-24 05:52:08
你可以这样使用:
protocol MyAccountCommunicatorProvider {
var networkCommunicator1: MyAccountCommunicator { get }
}
protocol EventsCommunicatorProvider {
var networkCommunicator2: EventsCommunicator { get }
}
class Injector: MyAccountCommunicatorProvider, EventsCommunicatorProvider {
var networkCommunicator: NetworkManager = NetworkManager()
lazy var networkCommunicator1: MyAccountCommunicator = {
return networkCommunicator
}()
lazy var networkCommunicator2: EventsCommunicator = {
return networkCommunicator
}()
}https://stackoverflow.com/questions/46900851
复制相似问题