这个问题更多来自架构的观点。每次出现新的应用程序时,都需要构建某种类型的网络层,它封装了其他层的所有网络逻辑。我解决这个问题的方法包括使用 NetworkProtocol ,其作业是声明API提供的每个可能的功能。
protocol NetworkProtocol {
func getExample(completion: @escaping Result<Void> -> Void)
}
此协议使用结果类型:
enum Result<T> {
case success(T)
case failure(ErrorType)
}
在此之后,我得到一个 NetworkClient ,需要在初始化期间注入 NetworkProtocol :
class NetworkClient {
let client: NetworkProtocol
init(client: NetworkProtocol) {
self.client = client
}
}
通过这样做,我可以明确区分网络层声明和实现的问题。通过使用模拟网络注入 NetworkClient ,我也可以轻松地轻松测试网络层。
我的问题是,是否有更好的方法来实现所有这一切?此解决方案的一个主要问题是 NetworkProtocol 很容易变得非常大,而 NetworkManager 实现了此协议。
很抱歉,如果这不是这个问题的地方。也许这更像是一个讨论然后问题:)