问题描述
我在阅读Link时遇到了有关协议的问题。
说,我们有一个协议可以处理网络请求。
protocol NetworkService {
func request(_ endpoint: Endpoint,completionHandler: @escaping () -> Void)
}
然后我们创建类似
class NetworkManager: NetworkService {
func request(_ endpoint: Endpoint,completionHandler: @escaping () -> Void) {
}
}
但是我们不能不使用协议就将func request(_ endpoint: Endpoint,completionHandler: @escaping () -> Void)
添加到类本身吗?
我了解理论,以及为什么在您有多个符合某种协议的类(例如,Flyable
,然后有方法fly
,然后是诸如{{ 1}}或Bird
采用此协议,并且它们具有不同的Plane
功能,然后您可以创建fly
的数组并对其进行不同的处理,但请回到{{1} },我看不出它有什么用?我仍然是新手,将不胜感激!
解决方法
是的,你可以用 class 做,但它有自己的问题,比如
- 类不支持多重继承。
- 你不能像使用协议那样使用结构和枚举
- 您创建的类型将具有紧密耦合
对于网络类,它对测试很有用,比如通过创建不同的网络管理器来创建模拟网络请求而不是网络管理器,这些管理器向 NetworkService 确认,如果你想向网络管理器添加一些新功能,你可以添加新协议并确认它。