TinyNetworking 5.0.0

TinyNetworking 5.0.0

Joan Disho维护。



  • Joan Disho

🌩TinyNetworking

Mac Twitter: @_disho

  • 使用 Swift 编写的简单网络抽象层。
  • 对 NSURLSession 的轻量级封装。
  • 支持 CRUD 方法。
  • 对正确 API 端点访问进行编译时检查。
  • 扩展 API 的 Combine 扩展。
  • (可选)提供 API 的 RxSwift 扩展。
  • Moya 启发。
  • 无外部依赖。

🛠安装

CocoaPods

要使用 CocoaPods 将 TinyNetworking 集成到 Xcode 项目中,在 Podfile 中指定它

pod 'TinyNetworking'
    
#or
    
pod 'TinyNetworking/RxSwift' # for the RxSwift extentions

然后,运行以下命令

$ pod install

Carthage

即将推出

Swift 包管理器

将以下项作为依赖项添加到您的 Package.swift

.package(url: "https://github.com/jdisho/TinyNetworking.git", .upToNextMajor(from: "4.0.0"))

手动

如果您不想使用任何依赖关系管理器,可以手动将 TinyNetworking 集成到项目中,通过下载源代码并将文件放置到项目目录中。

🏃‍♀️入门指南

设置一个包含所有 API 资源的 enum,如下所示

enum Unsplash {
  case me
  case photo(id: String)
  case collection(id: String)
  case likePhoto(id: String)
  ...
}

扩展 enum 并符合 Resource 协议。

extension Unsplash: Resource {
  var baseURL: URL {
    return URL(string: "https://api.unsplash.com")!
  }
  
  var endpoint: Endpoint {
    switch self {
    case .me:
      return .get(path: "/me")
    case let .photo(id: id):
      return .get(path: "/photos/\(id)")
    case let .collection(id: id):
      return .get(path: "/collections/\(id)")
    case let .likePhoto(id: id):
      return .post(path: "/photos/\(id)/like")
    }
  }
 
  var task: Task {
    var params: [String: Any] = [:]
    return .requestWithParameters(params, encoding: URLEncoding())
  }
  
  var headers: [String: String] {
    return ["Authorization": "Bearer xxx"]
  }
  
  var cachePolicy: URLRequest.CachePolicy {
    return .useProtocolCachePolicy
  }
}

⚙️制作和处理请求

import TinyNetworking

let tinyNetworking = TinyNetworking<Unsplash>()

tinyNetworking.request(.photo(id: "1234")) { result in
  switch result {
    case let .success(response):
      let photo = try? response.map(to: Photo.self)
      print(photo)
    case let .failure(error):
      print(error)
  }
}

🔖响应

发送请求后,TinyNetworking将结果以Result的形式返回,这是两个情况之一。如果成功,将返回一个Response对象,否则是错误。

Response对象提供了以下使用可能性:

  • 请求的原始数据。
  • URLRequest对象。
  • HTTP响应。
  • 调试描述。
  • 数据的JSON表示。
  • 以JSON格式打印的数据的整洁版本。
  • 将数据映射/解码到可解码对象的方法。可解码对象是符合CodableDecodable+Encodable)协议的对象。

🐍响应式扩展

响应式扩展很酷。TinyNetworking为Combine、RxSwift和很快为ReactiveSwift提供响应式扩展。

Combine

return tinyNetworking
     .requestPublisher(resource: .photo(id: id))
     .map(to: Photo.self)

RxSwift

return tinyNetworking.rx
     .request(resource: .photo(id: id))
     .map(to: Photo.self)

示例

Papr

👤作者

这个小程序库是用❤️Joan DishoQuickBird Studios 创建

📃许可

TinyNetworking在MIT许可下发布。有关更多信息,请参阅License.md