NetworkSessionKit 1.0.3

NetworkSessionKit 1.0.3

Jáder Nunes 维护。



 
依赖项
Alamofire= 5.8.1
LocalizeKit= 1.0.1
SwiftUtilsKit= 1.2.4
 

  • 作者
  • Jáder Nunes - https://jadernunes.com

Cocoapods platforms CocoaPod Version Swift 5 compatible

NetworkSessionKit

安装


Cocoapods

NetworkSessionKit 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中:

例如。

pod 'NetworkSessionKit', '1.0.0'

Swift 包管理器

  1. 文件 > Swift 包 > 添加包依赖
  2. 添加 https://github.com/jadernunes/NetworkSessionKit.git

或者

更新 Package.swift 中的 dependencies

dependencies: [
    .package(url: "https://github.com/jadernunes/NetworkSessionKit.git", .upToNextMajor(from: "1.0.0"))
]

用法


基本上,您需要使用 Requestable 协议,就这么简单,但以下是如何更好地利用它的示例

  1. 创建一个文件以放置此协议的实现。例如:Resource
import NetworkSession

enum ListAnimalsResources {
    case loadAll
}

extension ListAnimalsResources: Requestable {
    
    var method: HTTPMethodType {
        switch self {
        case .loadAll:
            return .get
        }
    }
    
    var parameters: Params? {
        switch self {
        case let .loadAll:
            let params: [String: Any] = [
                "blabla": "bla"
            ]
            
            return params
        }
    }
    
    var path: String {
        switch self {
        case .loadAll:
            return "/animals"
        }
    }
}
  1. 创建一个文件以实现请求。
import Foundation
import NetworkSession

protocol IListAnimalsService {
    func loadAll() async throws -> [AnimalDTO]
}

struct ListAnimalsService: IListAnimalsService {
    
    // MARK: - Properties
    
    private let network: INetwork
    
    // MARK: - Life cycle
    
    init(network: INetwork = NetworkInstance) {
        self.network = network
    }
    
    // MARK: - Methods
    
    func loadAll() async throws -> [AnimalDTO] {
        try await network
            .makeRequest(requester: ListAnimalsResources.loadAll)
    }
}
  1. 下一步是调用实际请求
protocol IListAnimalsViewModel {
    func loadAllAnimals() async
}

struct ListAnimalsViewModel: IListAnimalsViewModel {
    
    // MARK: - Properties
    
    private let service: IListAnimalsService
    
    // MARK: - Life cycle
    
    init(service: IListAnimalsService = ListAnimalsService()) {
        self.service = service
    }
    
    // MARK: - Methods
    
    @MainActor
    func loadAllAnimals() async {
        do {
            let animals = try await service.loadAll(page: page)
        } catch {
            // Handle error
        }
    }
}