我正在Swift中为iOS创建一个应用程序,并且试图将我的API调用逻辑保留在我的ViewControllers之外。我跟着this tutorial进行了一个API调用,我将在下面介绍。使用协议实现多个API调用(服务器请求)
我正在创建ViewController将实现的协议“APIControllerProtocol”,然后创建一个APIController类,该类将包含名为'delegate'的属性以保存APIControllerProtocol类型的实例。该协议被简单地定义为
protocol APIControllerProtocol {
func didReceiveAPIResults(result: SwiftyJSON.JSON)
}
而且视图控制器将实行didReceiveAPIResults函数的调用API调用返回JSON数据之后。 ViewController将包含一个APIController的实例,并调用一个函数调用API。
在这一点上,我想让更多的ViewControllers执行API调用,如果我只需要为每个ViewController调用1个API,那么我可以将另一个函数添加到APIController中,并且我可以让新的ViewController使用相同的协议。但是,如果有,将需要作出2所或多个API调用的ViewController这个逻辑是有缺陷的,因为
- 我不能在两种不同的方式调用didReceiveAPIResults在ViewController中,
我不认为添加多个'委托'属性到APIController类来保存不同类型的协议是一条路。
在协议中定义多个函数意味着我将不得不在ViewControllers中实现所有这些函数,只需要进行1次API调用即可。
我的思路来解决这个问题是
做一个APIController类APIControllerProtocol在APIControllerProtocol每个视图控制器
使用可选功能,因此不是每个视图控制器就必须实现所有的功能(我不知道这会如何工作)
任何其他见解,将不胜感激。
是的,此处的API调用表示服务器请求。闭包设计对协议设计有什么好处?我不明白维护一个请求列表的重要性是什么?您能否提供代码或指向教程的链接以向我展示如何使用服务器请求的关闭? – hoffware
这听起来像你想拥有一个管理多个服务器请求的类。代表是一对一的关系。每个服务器管理器对象只能有一个且只有一个委托。您不能以这种方式管理来自3个不同视图控制器的未决请求。有了完成块,你可以。 –
您可能想要看看像AFNetworking这样的图书馆,而不是重新发明轮子。特别是那个非常丰富和成熟,有很多很棒的功能,并且有成千上万的开发者在使用它。它能做到我们谈论得非常好。 –