如何在面向协议的网络中添加分页页面
Posted
技术标签:
【中文标题】如何在面向协议的网络中添加分页页面【英文标题】:How add page for pagination in protocol oriented networking 【发布时间】:2022-01-06 20:12:11 【问题描述】:我刚刚学习了如何创建面向协议的网络,但我只是不知道如何在协议中添加分页页面。我的设置是这样的
protocol Endpoint
var base: String get
var path: String get
extension Endpoint
var apiKey: String
return "api_key=SOME_API_KEY"
var urlComponents: URLComponents
var components = URLComponents(string: base)!
components.path = path
components.query = apiKey
return components
var request: URLRequest
let url = urlComponents.url!
return URLRequest(url: url)
enum MovieDBResource
case popular
case topRated
case nowPlaying
case reviews(id: Int)
extension MovieDBResource: Endpoint
var base: String
return "https://api.themoviedb.org"
var path: String
switch self
case .popular: return "/3/movie/popular"
case .topRated: return "/3/movie/top_rated"
case .nowPlaying: return "/3/movie/now_playing"
case .reviews(let id): return "/3/movie/\(id)/videos"
这是我的网络服务类方法
func getReview(movie resource: MovieDBResource, completion: @escaping (Result<MovieItem, MDBError>) -> Void)
print(resource.request)
fetch(with: resource.request, decode: (json) -> MovieItem? in
guard let movieResults = json as? MovieItem else return nil
return movieResults
, completion: completion)
我如何在协议中添加页面,以便我可以在 viewController 中调用和添加参数,现在我在 viewController 中的服务是这样的。我需要页面参数
service.getReview(movie: .reviews(id: movie.id)) [weak self] results in
guard let self = self else return
switch results
case .success(let movies):
print(movies)
case .failure(let error):
print(error)
谢谢
【问题讨论】:
【参考方案1】:您可以将其作为参数添加到您的枚举案例中,例如:
case popular(queryParameters: [String: Any])
您可以创建具有buildRequest(_:Endpoint)
的Router
类,在这里您可以获取queryParameters
并将其添加到包含page
和limit
或任何其他查询参数的url。
如果请求HTTPMethod为POST
,并且需要在body中发送数据,也可以为bodyParameters
添加另一个参数。
【讨论】:
我明白你的建议,但我仍然不明白如何在路由器中使用 buildRequest。很抱歉我还是新手buildRequest
是您的自定义方法,它以Endpoint
作为参数,并且您的endpoint
已经具有request
和URL
,所以您需要做的就是检查您是否有queryParameters
,你会将这些项目解析为请求的url。所以您现在将拥有带有 url 的请求,并且已经向其中添加了查询参数。
查看这篇文章会对你有帮助medium.com/flawless-app-stories/…以上是关于如何在面向协议的网络中添加分页页面的主要内容,如果未能解决你的问题,请参考以下文章