DataManagerRxSwift 是一个轻量级的服务管理工具。以下是亮点之一:
- 封装与网络调用相关的样板代码。
- 确保网络调用始终在后台线程中执行。
要求 iOS 10.0,Swift 4.0,RxSwift 4.0
安装 DataManager 通过 CocoaPods 提供。要安装它,请将以下行添加到您的 Podfile 中
pod 'DataManagerRxSwift'
用法
设置
当您的控制器加载时,全局初始化 DataManager 和 DisposeBag。
import DataManagerRxSwift
import RxSwift
var dataManager = DataManager()
var disposeBag = DisposeBag()
要生成服务调用,您需要设置请求模型。
let requestModel = RequestModel(url: serviceRequestModel.baseURL, path: serviceRequestModel.path.rawValue, method: serviceRequestModel.method.rawValue, header: serviceRequestModel.header, bodyParameters: serviceRequestModel.bodyParameters, getRequestParameters: serviceRequestModel.getRequestParameters)
DataManager 使用泛型,所以您不必每次执行服务调用时都担心将响应转换为服务类。您只需要定义从管理器获取的模型类型即可,并在成功中定义该模型应为 Decodable 或 Codable 类型。例如
这是一个来自 itunes 服务器的收据验证服务模型,用于 In App 订阅验证检查
class VerifyReceipt : NSObject, Codable {
var environment : String?
var latest_receipt : String?
var latest_receipt_info : [LatestReceiptInfo]?
var pending_renewal_info : [PendingRenewalInfo]?
var receipt : Receipt?
var status : Int?
}
class Receipt : NSObject, Codable {
var adam_id : Int?
var app_item_id : Int?
var application_version : String?
var bundle_id : String?
var download_id : Int?
var in_app : [InApp]?
var original_application_version : String?
var original_purchase_date : String?
var original_purchase_date_ms : String?
var original_purchase_date_pst : String?
var receipt_creation_date : String?
var receipt_creation_date_ms : String?
var receipt_creation_date_pst : String?
var receipt_type : String?
var request_date : String?
var request_date_ms : String?
var request_date_pst : String?
var version_external_identifier : Int?
}
class InApp : NSObject, Codable {
var expires_date : String?
var expires_date_ms : String?
var expires_date_pst : String?
var is_in_intro_offer_period : String?
var is_trial_period : String?
var original_purchase_date : String?
var original_purchase_date_ms : String?
var original_purchase_date_pst : String?
var original_transaction_id : String?
var product_id : String?
var purchase_date : String?
var purchase_date_ms : String?
var purchase_date_pst : String?
var quantity : String?
var transaction_id : String?
var web_order_line_item_id : String?
}
class PendingRenewalInfo : NSObject, Codable {
var auto_renew_product_id : String?
var auto_renew_status : String?
var original_transaction_id : String?
var product_id : String?
}
class LatestReceiptInfo : NSObject, Codable {
var expires_date : String?
var expires_date_ms : String?
var expires_date_pst : String?
var is_in_intro_offer_period : String?
var is_trial_period : String?
var original_purchase_date : String?
var original_purchase_date_ms : String?
var original_purchase_date_pst : String?
var original_transaction_id : String?
var product_id : String?
var purchase_date : String?
var purchase_date_ms : String?
var purchase_date_pst : String?
var quantity : String?
var subscription_group_identifier : String?
var transaction_id : String?
var web_order_line_item_id : String?
}
dataManager.serviceCall(apiRequest: requestModel).subscribe(onSuccess: { [weak self] (model: VerifyReceipt) in
guard let strongSelf = self else { return }
if let date = strongSelf.getExpirationDate(model: model) {
print(date)
}
}) { (error: Error) in
print(error.localizedDescription)
}.disposed(by: self.disposeBag)