我只是學習了如何創建面向協議的網路,但我只是不知道如何在協議中添加分頁頁面。我的設定是這樣的
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)
}
}
謝謝
uj5u.com熱心網友回復:
您可以將其作為引數添加到您的列舉案例中,例如:
case popular(queryParameters: [String: Any])
您可以創建Router具有 的類,buildRequest(_:Endpoint)在這里您可以獲取queryParameters并將其添加到女巫將包含page和limit或任何其他查詢引數的 url 中。
bodyParameters如果請求 HTTPMethod 是POST并且您需要在正文中發送資料,您還可以添加另一個引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/370551.html
