GMSNetworkLayer 1.1.3

GMSNetworkLayer 1.1.3

Gabriel Silveira 计算。



  • 作者:
  • Gabriel Silveira

GMSNetworkLayer

Build Status codecov

需求

  • iOS 12.2+
  • Xcode 11+
  • Swift 5.0+

安装

CocoaPods

CocoaPods 是 Cocoa 项目的依赖关系管理器。有关使用和安装说明,请访问他们的网站。要使用 CocoaPods 将 GMSNetworkLayer 集成到您的 Xcode 项目中,在 Podfile 中指定它。

pod 'GMSNetworkLayer', '~> 1.1'

Carthage

Carthage 是一个集中式的依赖项管理器,构建您的依赖并为您提供二进制框架。要使用 Carthage 将 GMSNetworkLayer 集成到您的 Xcode 项目中,请在 Cartfile 中指定它。

github "GabrielSilveiraa/GMSNetworkLayer" ~> 1.1

使用

创建一个与 EndPointType 协议一致的 Enum。示例:

enum BookApi {
    case case booksList(_ index: Int)
}

extension BookApi: EndPointType {
    var baseURL: URL {
         guard let url = URL(string: "https://www.googleapis.com") else {
            fatalError("baseURL could not be configured.")
        }
        return url
    }
    
    var path: String {
        switch self {
        case .booksList:
            return "/books/v1/volumes"
        }
    }
    
    var httpMethod: HTTPMethod {
        switch self {
        case .booksList:
            return .get
        }
    }
    
    var encoding: ParameterEncoding? {
        switch self {
        case .booksList:
            return .urlEncoding
        }
    }
    
    var parameters: [String : Any] {
        switch self {
        case .booksList(let index):
            return ["q" : "ios",
                    "maxResults" : 20,
                    "startIndex" : index]
        }
    }
}

然后按照以下方式创建你的服务类:

class BooksListService {
    let networkManager: NetworkManager
    
    init(session: URLSession = .shared) {
        networkManager = NetworkManager(session: session)
    }
}

extension BooksListService: BooksListServiceProtocol {
    func getBooksList(index: Int, completion: @escaping (Result<BookVolumes, Error>) -> Void) {
        let endPoint = BookApi.booksList(index)
        networkManager.request(endPoint, completion: completion)
    }
}

结果对象必须与以下示例一致的 Decodable 协议:

struct BookVolumes: Decodable {
    let items: [BookVolume]?
}

struct BookVolume: Decodable {
    let id: String
}