Quellcode durchsuchen

添加了类型

南鑫林 vor 6 Jahren
Ursprung
Commit
fb0763bf49

+ 431 - 19
RainbowPlanet/RainbowPlanet/Service/SwiftMoyaService/SwiftMoyaServiceManger/SwiftMoyaNetWorkManager/SwiftRXMoyaReamlObjectSwiftJsonNetWorkManager.swift

@@ -20,6 +20,8 @@ public class SwiftRXMoyaReamlObjectSwiftJsonNetWorkManager: NSObject {
     
     static let shared : SwiftRXMoyaReamlObjectSwiftJsonNetWorkManager = SwiftRXMoyaReamlObjectSwiftJsonNetWorkManager()
     
+    /// 成功回调 BaseModel
+    typealias successCallBaseModelback = (_ T: BaseModel) -> Void
     /// 成功回调 任意类型
     typealias successCallAnyback = (_ T: Any) -> Void
     /// 成功回调带泛型 对象
@@ -31,6 +33,78 @@ public class SwiftRXMoyaReamlObjectSwiftJsonNetWorkManager: NSObject {
     typealias falseCallback = () -> Void
     var falseCallback : falseCallback?
     
+}
+
+// MARK: - 网络请求 取消
+extension SwiftRXMoyaReamlObjectSwiftJsonNetWorkManager {
+    // MARK: 取消所有请求
+    /// 取消所有请求
+    func cancelAllRequest() {
+        provider.manager.session.getTasksWithCompletionHandler { dataTasks, uploadTasks, downloadTasks in
+            dataTasks.forEach { $0.cancel() }
+            uploadTasks.forEach { $0.cancel() }
+            downloadTasks.forEach { $0.cancel() }
+        }
+    }
+    
+    // MARK: 取消指定请求
+    /// 取消指定请求
+    ///
+    /// - Parameter url: 指定的网络请求地址
+    func cancelDesignationRequest(url:String) {
+        provider.manager.session.getTasksWithCompletionHandler {
+            (sessionDataTask, uploadData, downloadData) in
+            sessionDataTask.forEach {
+                //只取消指定url的请求
+                if ($0.originalRequest?.url?.absoluteString == url) {
+                    $0.cancel()
+                }
+            }
+        }
+    }
+}
+
+// MARK: - 网络请求 没有缓存
+extension SwiftRXMoyaReamlObjectSwiftJsonNetWorkManager {
+    // MARK: 泛型网络请求返回BaseModel
+    /// 泛型网络请求返回BaseModel
+    ///
+    /// - Parameters:
+    ///   - target: 请求地址加参数
+    ///   - completion: 返回对象
+    func requestBaseModel(target: MultiTarget,completion: @escaping successCallBaseModelback) -> Void {
+        //判断是否链接网络
+        if !isNetworkConnect{
+            if let falseCallback = self.falseCallback  {
+                falseCallback()
+            }
+            return
+        }
+        
+        provider.rx
+            .request(target)
+            .mapBaseModel()
+            .subscribeOn(ConcurrentDispatchQueueScheduler(qos: .userInitiated))
+            .observeOn(MainScheduler.instance)
+            .subscribe(onSuccess: { [weak self] element in
+                
+                guard let element = element else {
+                    if let falseCallback = self?.falseCallback  {
+                        falseCallback()
+                    }
+                    return
+                }
+                completion(element)
+            }) {
+                [weak self] (error) in
+                if let falseCallback = self?.falseCallback  {
+                    falseCallback()
+                }
+                SwiftProgressHUD.shared().showError("网络链接失败,请检查网络")
+            }
+            .disposed(by: disposeBag)
+    }
+    
     // MARK: 泛型网络请求返回任意类型
     /// 泛型网络请求返回任意类型
     ///
@@ -149,38 +223,208 @@ public class SwiftRXMoyaReamlObjectSwiftJsonNetWorkManager: NSObject {
             }
             .disposed(by: disposeBag)
     }
-    
-    // MARK: 取消所有请求
-    /// 取消所有请求
-    func cancelAllRequest() {
-        provider.manager.session.getTasksWithCompletionHandler { dataTasks, uploadTasks, downloadTasks in
-            dataTasks.forEach { $0.cancel() }
-            uploadTasks.forEach { $0.cancel() }
-            downloadTasks.forEach { $0.cancel() }
+}
+
+// MARK: - 网络请求 缓存
+extension SwiftRXMoyaReamlObjectSwiftJsonNetWorkManager {
+    // MARK: 泛型网络请求返回BaseModel 缓存
+    /// 泛型网络请求返回BaseModel 缓存
+    ///
+    /// - Parameters:
+    ///   - target: 请求地址加参数
+    ///   - completion: 返回对象
+    func requestCacheBaseModel(target: MultiTarget,completion: @escaping successCallBaseModelback) -> Void {
+        //判断是否链接网络
+        if !isNetworkConnect{
+            if let falseCallback = self.falseCallback  {
+                falseCallback()
+            }
+            return
         }
+        
+        provider.rx
+            .request(target)
+            .mapCacheBaseModel()
+            .subscribeOn(ConcurrentDispatchQueueScheduler(qos: .userInitiated))
+            .observeOn(MainScheduler.instance)
+            .subscribe(onSuccess: { [weak self] element in
+                
+                guard let element = element else {
+                    if let falseCallback = self?.falseCallback  {
+                        falseCallback()
+                    }
+                    return
+                }
+                completion(element)
+            }) {
+                [weak self] (error) in
+                if let falseCallback = self?.falseCallback  {
+                    falseCallback()
+                }
+                SwiftProgressHUD.shared().showError("网络链接失败,请检查网络")
+            }
+            .disposed(by: disposeBag)
     }
     
-    // MARK: 取消指定请求
-    /// 取消指定请求
+    // MARK: 泛型网络请求返回任意类型 缓存
+    /// 泛型网络请求返回任意类型 缓存
     ///
-    /// - Parameter url: 指定的网络请求地址
-    func cancelDesignationRequest(url:String) {
-        provider.manager.session.getTasksWithCompletionHandler {
-            (sessionDataTask, uploadData, downloadData) in
-            sessionDataTask.forEach {
-                //只取消指定url的请求
-                if ($0.originalRequest?.url?.absoluteString == url) {
-                    $0.cancel()
+    /// - Parameters:
+    ///   - target: 请求地址加参数
+    ///   - completion: 返回对象
+    func requestCacheAny(target: MultiTarget,completion: @escaping successCallAnyback) -> Void {
+        //判断是否链接网络
+        if !isNetworkConnect{
+            if let falseCallback = self.falseCallback  {
+                falseCallback()
+            }
+            return
+        }
+        
+        provider.rx
+            .request(target)
+            .mapCacheAny()
+            .subscribeOn(ConcurrentDispatchQueueScheduler(qos: .userInitiated))
+            .observeOn(MainScheduler.instance)
+            .subscribe(onSuccess: { [weak self] element in
+                
+                guard let element = element else {
+                    if let falseCallback = self?.falseCallback  {
+                        falseCallback()
+                    }
+                    return
                 }
+                completion(element)
+            }) {
+                [weak self] (error) in
+                if let falseCallback = self?.falseCallback  {
+                    falseCallback()
+                }
+                SwiftProgressHUD.shared().showError("网络链接失败,请检查网络")
+            }
+            .disposed(by: disposeBag)
+    }
+    
+    // MARK: 泛型网络请求返回对象 缓存
+    /// 泛型网络请求返回对象 缓存
+    ///
+    /// - Parameters:
+    ///   - type: 泛型
+    ///   - target: 请求地址加参数
+    ///   - completion: 返回对象
+    func requestCacheObject<T: Object>(_ type: T.Type ,target: MultiTarget,completion: @escaping successCallObjectBack) -> Void {
+        //判断是否链接网络
+        if !isNetworkConnect{
+            if let falseCallback = self.falseCallback  {
+                falseCallback()
             }
+            return
         }
+        
+        provider.rx
+            .request(target)
+            .mapCacheObject(T.self)
+            .subscribeOn(ConcurrentDispatchQueueScheduler(qos: .userInitiated))
+            .observeOn(MainScheduler.instance)
+            .subscribe(onSuccess: { [weak self] element in
+                
+                guard let element = element else {
+                    if let falseCallback = self?.falseCallback  {
+                        falseCallback()
+                    }
+                    return
+                }
+                completion(element)
+            }) {
+                [weak self] (error) in
+                if let falseCallback = self?.falseCallback  {
+                    falseCallback()
+                }
+                SwiftProgressHUD.shared().showError("网络链接失败,请检查网络")
+            }
+            .disposed(by: disposeBag)
     }
     
+    // MARK: 泛型网络请求返回数组对象 缓存
+    /// 泛型网络请求返回数组对象 缓存
+    ///
+    /// - Parameters:
+    ///   - type: 泛型
+    ///   - target: 请求地址加参数
+    ///   - completion: 返回对象数组
+    func requestCacheArrayObject<T: Object>(_ type: T.Type ,target: MultiTarget,completion: @escaping successCallArrayObjectback) -> Void {
+        //判断是否链接网络
+        if !isNetworkConnect{
+            if let falseCallback = self.falseCallback  {
+                falseCallback()
+            }
+            return
+        }
+        
+        provider.rx
+            .request(target)
+            .mapArrayObject(T.self)
+            .subscribeOn(ConcurrentDispatchQueueScheduler(qos: .userInitiated))
+            .observeOn(MainScheduler.instance)
+            .subscribe(onSuccess: { [weak self] element in
+                
+                guard let element = element else {
+                    if let falseCallback = self?.falseCallback  {
+                        falseCallback()
+                    }
+                    return
+                }
+                completion(element)
+            }) {
+                [weak self] (error) in
+                if let falseCallback = self?.falseCallback  {
+                    falseCallback()
+                }
+                SwiftProgressHUD.shared().showError("网络链接失败,请检查网络")
+            }
+            .disposed(by: disposeBag)
+    }
 }
 
-// MARK: - 泛型
+
+// MARK: - 泛型 没有缓存
 extension PrimitiveSequence where TraitType == SingleTrait, ElementType == Response {
     
+    // MARK: 泛型BaseModel
+    func mapBaseModel() -> Single<BaseModel?> {
+        return flatMap { response -> Single<BaseModel?> in
+            do {
+                let json = try JSON(response.mapJSON())
+                if response.statusCode == 200 {
+                    NXLLog("\nurl=\(String(describing: response.request!.url!))\nstatusCode=\(response.statusCode)\njson=\n\(json.description)");
+                    
+                    let baseModel = BaseModel.init(json: json)
+                    return Single<BaseModel?>.just(baseModel)
+
+                }else if response.statusCode == 401 {
+                    let url = String(describing: response.request!.url!)
+                    NXLLog("\nurl=\(url)\nstatusCode=\(response.statusCode)\njson=\n\(json.description)")
+                    let infoModel = InfoModel(JSONString: json.description)
+                    SwiftProgressHUD.shared().showText(infoModel!.message ?? "登录过期,请重新登录")
+                    kAppDelegate.setLoginController()
+                    return Single<BaseModel?>.just(nil)
+                }else {
+                    let url = String(describing: response.request!.url!)
+                    NXLLog("\nurl=\(url)\nstatusCode=\(response.statusCode)\nerror=\n\(response.description)");
+                    SwiftProgressHUD.shared().showText(response.description)
+                    
+                    return Single<BaseModel?>.just(nil)
+                }
+                
+            } catch {
+                let url = String(describing: response.request!.url!)
+                NXLLog("\nurl=\(url)\nstatusCode=\(response.statusCode)\nerror=\n\(response.description)")
+                SwiftProgressHUD.shared().showText(response.description)
+                return Single<BaseModel?>.just(nil)
+            }
+        }
+    }
+    
     // MARK: 泛型任意值
     func mapAny() -> Single<Any?> {
         return flatMap { response -> Single<Any?> in
@@ -310,3 +554,171 @@ extension PrimitiveSequence where TraitType == SingleTrait, ElementType == Respo
         }
     }
 }
+
+// MARK: - 泛型 缓存
+extension PrimitiveSequence where TraitType == SingleTrait, ElementType == Response {
+    // MARK: 泛型BaseModel
+    func mapCacheBaseModel() -> Single<BaseModel?> {
+        return flatMap { response -> Single<BaseModel?> in
+            do {
+                let json = try JSON(response.mapJSON())
+                if response.statusCode == 200 {
+                    NXLLog("\nurl=\(String(describing: response.request!.url!))\nstatusCode=\(response.statusCode)\njson=\n\(json.description)");
+                    
+                    let baseModel = BaseModel.init(json: json)
+                    return Single<BaseModel?>.just(baseModel)
+                    
+                }else if response.statusCode == 401 {
+                    let url = String(describing: response.request!.url!)
+                    NXLLog("\nurl=\(url)\nstatusCode=\(response.statusCode)\njson=\n\(json.description)")
+                    let infoModel = InfoModel(JSONString: json.description)
+                    SwiftProgressHUD.shared().showText(infoModel!.message ?? "登录过期,请重新登录")
+                    kAppDelegate.setLoginController()
+                    return Single<BaseModel?>.just(nil)
+                }else {
+                    let url = String(describing: response.request!.url!)
+                    NXLLog("\nurl=\(url)\nstatusCode=\(response.statusCode)\nerror=\n\(response.description)");
+                    SwiftProgressHUD.shared().showText(response.description)
+                    
+                    return Single<BaseModel?>.just(nil)
+                }
+                
+            } catch {
+                let url = String(describing: response.request!.url!)
+                NXLLog("\nurl=\(url)\nstatusCode=\(response.statusCode)\nerror=\n\(response.description)")
+                SwiftProgressHUD.shared().showText(response.description)
+                return Single<BaseModel?>.just(nil)
+            }
+        }
+    }
+    
+    // MARK: 泛型任意值 缓存
+    func mapCacheAny() -> Single<Any?> {
+        return flatMap { response -> Single<Any?> in
+            do {
+                let json = try JSON(response.mapJSON())
+                if response.statusCode == 200 {
+                    NXLLog("\nurl=\(String(describing: response.request!.url!))\nstatusCode=\(response.statusCode)\njson=\n\(json.description)");
+                    
+                    let baseModel = BaseModel.init(json: json)
+                    if baseModel.code  == 0 {
+                        let object = baseModel.data
+                        return Single<Any?>.just(object)
+                    }else if baseModel.code  == 1 {
+                        SwiftProgressHUD.shared().showText(baseModel.msg ?? "信息有误!!!")
+                        return Single<Any?>.just(nil)
+                    }else {
+                        SwiftProgressHUD.shared().showText(baseModel.msg ?? "信息有误!!!")
+                        return Single<Any?>.just(nil)
+                    }
+                }else if response.statusCode == 401 {
+                    let url = String(describing: response.request!.url!)
+                    NXLLog("\nurl=\(url)\nstatusCode=\(response.statusCode)\njson=\n\(json.description)")
+                    let infoModel = InfoModel(JSONString: json.description)
+                    SwiftProgressHUD.shared().showText(infoModel!.message ?? "登录过期,请重新登录")
+                    kAppDelegate.setLoginController()
+                    return Single<Any?>.just(nil)
+                }else {
+                    let url = String(describing: response.request!.url!)
+                    NXLLog("\nurl=\(url)\nstatusCode=\(response.statusCode)\nerror=\n\(response.description)");
+                    SwiftProgressHUD.shared().showText(response.description)
+                    
+                    return Single<Any?>.just(nil)
+                }
+                
+            } catch {
+                let url = String(describing: response.request!.url!)
+                NXLLog("\nurl=\(url)\nstatusCode=\(response.statusCode)\nerror=\n\(response.description)")
+                SwiftProgressHUD.shared().showText(response.description)
+                return Single<Any?>.just(nil)
+            }
+        }
+    }
+    // MARK: 泛型返回对象 缓存
+    func mapCacheObject<T: Object>(_ type: T.Type) -> Single<T?> {
+        return flatMap { response -> Single<T?> in
+            do {
+                let json = try JSON(response.mapJSON())
+                if response.statusCode == 200 {
+                    NXLLog("\nurl=\(String(describing: response.request!.url!))\nstatusCode=\(response.statusCode)\njson=\n\(json.description)");
+                    
+                    let baseModel = BaseModel.init(json: json)
+                    if baseModel.code  == 0 {
+                        let object = T(json: JSON(baseModel.data))
+                        return Single<T?>.just(object)
+                    }else if baseModel.code  == 1 {
+                        SwiftProgressHUD.shared().showText(baseModel.msg ?? "信息有误!!!")
+                        return Single<T?>.just(nil)
+                    }else {
+                        SwiftProgressHUD.shared().showText(baseModel.msg ?? "信息有误!!!")
+                        return Single<T?>.just(nil)
+                    }
+                }else if response.statusCode == 401 {
+                    let url = String(describing: response.request!.url!)
+                    NXLLog("\nurl=\(url)\nstatusCode=\(response.statusCode)\njson=\n\(json.description)")
+                    let infoModel = InfoModel(JSONString: json.description)
+                    SwiftProgressHUD.shared().showText(infoModel!.message ?? "登录过期,请重新登录")
+                    kAppDelegate.setLoginController()
+                    return Single<T?>.just(nil)
+                }else {
+                    let url = String(describing: response.request!.url!)
+                    NXLLog("\nurl=\(url)\nstatusCode=\(response.statusCode)\nerror=\n\(response.description)");
+                    SwiftProgressHUD.shared().showText(response.description)
+                    
+                    return Single<T?>.just(nil)
+                }
+                
+            } catch {
+                let url = String(describing: response.request!.url!)
+                NXLLog("\nurl=\(url)\nstatusCode=\(response.statusCode)\nerror=\n\(response.description)")
+                SwiftProgressHUD.shared().showText(response.description)
+                return Single<T?>.just(nil)
+            }
+        }
+    }
+    
+    // MARK: 泛型返回对象数组 缓存
+    func mapCacheArrayObject<T: Object>(_ type: T.Type) -> Single<[T]?> {
+        return flatMap { response -> Single<[T]?> in
+            do {
+                let json = try JSON(response.mapJSON())
+                if response.statusCode == 200 {
+                    
+                    let url = String(describing: response.request!.url!)
+                    NXLLog("\nurl=\(url)\nstatusCode=\(response.statusCode)\njson=\n\(json.description)")
+                    
+                    let baseModel = BaseModel.init(json: json)
+                    if baseModel.code  == 0 {
+                        let objects =  JSON(baseModel.data).arrayObject as! [T]
+                        return Single<[T]?>.just(objects)
+                    }else if baseModel.code  == 1 {
+                        SwiftProgressHUD.shared().showText(baseModel.msg ?? "信息有误!!!", textAlignment: .left)
+                        return Single<[T]?>.just(nil)
+                    }else {
+                        SwiftProgressHUD.shared().showText(baseModel.msg ?? "信息有误!!!", textAlignment: .left)
+                        return Single<[T]?>.just(nil)
+                    }
+                }else if response.statusCode == 401 {
+                    let url = String(describing: response.request!.url!)
+                    NXLLog("\nurl=\(url)\nstatusCode=\(response.statusCode)\njson=\n\(json.description)")
+                    let infoModel = InfoModel(JSONString: json.description)
+                    SwiftProgressHUD.shared().showText(infoModel!.message ?? "登录过期,请重新登录")
+                    kAppDelegate.setLoginController()
+                    return Single<[T]?>.just(nil)
+                }else {
+                    let url = String(describing: response.request!.url!)
+                    NXLLog("\nurl=\(url)\nstatusCode=\(response.statusCode)\nerror=\n\(response.description)");
+                    SwiftProgressHUD.shared().showText(response.description)
+                    return Single<[T]?>.just(nil)
+                }
+                
+            } catch {
+                let url = String(describing: response.request!.url!)
+                NXLLog("\nurl=\(url)\nstatusCode=\(response.statusCode)\nerror=\n\(response.description)")
+                SwiftProgressHUD.shared().showText(response.description)
+                return Single<[T]?>.just(nil)
+            }
+        }
+    }
+}
+