如何在面向协议的网络中添加分页页面

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 并将其添加到包含pagelimit 或任何其他查询参数的url。

如果请求HTTPMethod为POST,并且需要在body中发送数据,也可以为bodyParameters添加另一个参数。

【讨论】:

我明白你的建议,但我仍然不明白如何在路由器中使用 buildRequest。很抱歉我还是新手 buildRequest 是您的自定义方法,它以Endpoint 作为参数,并且您的endpoint 已经具有requestURL,所以您需要做的就是检查您是否有queryParameters,你会将这些项目解析为请求的url。所以您现在将拥有带有 url 的请求,并且已经向其中添加了查询参数。 查看这篇文章会对你有帮助medium.com/flawless-app-stories/…

以上是关于如何在面向协议的网络中添加分页页面的主要内容,如果未能解决你的问题,请参考以下文章

如何在 php 图像网格视图中添加分页?

如何使用 XSL-FO 在 PDF 中添加分页符?

如何在 ngx-datatable 中添加分页和页脚模板?

如何在 ASP.NET Core MVC 中添加分页,在 AJAX 调用中动态创建的表上

如何在我的搜索结果页上添加分页?

在使用 mpdf 库生成的 pdf 中添加分页符