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
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值