Swift--基于Alamofire网络请求 Networkable的具体实践

在DeviceNumberRequestable.swift文件中:

import Foundation

//请求结果
enum DeviceNumberRequestResult<T>{
    
    
     case success<T>
     case failure(Error)
}

//模型遵循Codable协议
struct DeviceNumberRequestModel: Codable{
    
    
     var StationNumber : Int = 0
     var DeviceType : Int = 0
}

//请求参数
struct DeviceNumberTargetType : NetworkTargetType{
    
    
      
      var storeID : String
      
      var baseURL : URL? {
    
    
          return URL(string: BaseeUrl)
      }

      var path:String {
    
    
          return "/express/load/source1/\(storeID)"
      }

      var httpMethod: NetworkMethod {
    
    
          return .get
      }
 
      var task: NetworkTask {
    
    
          return .requestPlain //没有参数的网络请求
      }

      var headers: [NetworkHTTPHeaders]?{
    
    
          return [CUTicket()]
      }
}

//发送请求
protocol DeviceNumberRequestable {
    
    }
extension DeviceNumberRequestable {
    
    
    
    func load(stordID : String , completion : @escaping (DeviceNumberRequestResult<[(index : Int , deviceModels : [SelectDeivceModel])]>) -> Void) -> Void {
    
    
        Network<DeviceNumberTargetType>.request(DeviceNumberTargetType(storeID: stordID)) {
    
     (result) in
            switch result {
    
    
            case let .success(response):
       
                if let models = response.toModel([DeviceNumberRequestModel].self) {
    
    
    --------------------------------------------------------
       这里面的内容根据你的数据结构 model来写,下面是我的例子             
                    var turples :  [(index : Int , deviceModels : [SelectDeivceModel])] = []
                    
                    (0...9).forEach{
    
     index in
                        turples.append((index: index == 0 ? 1 : index * 100, deviceModels: (0...99).map{
    
    
                            let stationNumber = index * 100 + $0
                            let selectDeivceModel = SelectDeivceModel(stationNumber: stationNumber)
                            
                            for model in models where model.StationNumber == stationNumber {
    
    
                                selectDeivceModel.isSelected = true
                                selectDeivceModel.deviceType = model.DeviceType
                                break
                            }
                            return selectDeivceModel
                        }))
                    }

    --------------------------------------------------------
                    completion(.success(turples))
                }else {
    
    
                    completion(.failure(NSError(domain: "转换失败", code: 911, userInfo: nil)))
                }
               
            case let .failure(error):
                 completion(.failure(error))
            }
        }
    }
}


//调用
 terminalNumberText.shouldBeiginEditHandler = {
    
     [unowned self] in
            guard let storeID = PalauDefaults.storeID.value else {
    
    
                return false
            }
            self.load(stordID: storeID, completion: {
    
    [weak self] (result) in
                guard let `self` = self else {
    
     return }
                switch result {
    
    
                case .success(let models):
                    print(models)
                                let deviceNumSelectedView = Bundle.main.loadNibNamed("DeviceNumSelectedView", owner: self, options: nil)?.first as! DeviceNumSelectedView
                                deviceNumSelectedView.center = self.view.center
                                deviceNumSelectedView.frame = CGRect(x: 20, y: 20, width: self.view.bounds.width - 40, height: self.view.bounds.height - 40)
                                deviceNumSelectedView.getCurrentNumBlock = {
    
     [weak self] d in
                                    self?.terminalNumberText.originText = (d < 10) ? "00\(d)" : (d < 100 ? "0\(d)" : "\(d)")
                                    self?.view.removerCover()
                                }


                                self.view.addSubViewWithCover(deviceNumSelectedView, blur: true, addColseBtn: false, canDisappare: false, closeBeforeHandle: nil)

                    deviceNumSelectedView.datas = models
                case .failure(let error):
                    print(error)
                    Utility.showNoticeAlertView(("Get DeviceNumer Failed",NSLocalizedString2("\(error.localizedDescription)", comment:"")))
                }
            })
            return true
        }

猜你喜欢

转载自blog.csdn.net/SoftwareDoger/article/details/102799509