专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构

实现StatusDAL中的loadStatus

  • 实现HMStatusDAL.swift中的loadStatus方法

    // 加载微博数据
    func loadStatus(since_id: Int, max_id: Int, finish: @escaping ([[String: Any]]?, Error?) -> Void) {
      // 1.查看本地是否有缓存数据
      loadCacheData(since_id: since_id, max_id: max_id) { (array) in
          // 2.如果本地有数据,直接返回给调用者
          if let array = array, array.count > 0 {
              print("本地加载 \(array.count)")
              finish(array, nil)
              return
          }
    
          print("网络加载")
          // 3.如果没有缓存数据,去网络加载数据
          // 判断accessToken是否为空
          guard let access_token = HMUserAccountViewModel.shared.userAccount?.access_token else {
              // accessToken为空
              return
          }
    
          // url
          let urlString = "2/statuses/home_timeline.json"
    
          // 参数
          var parameters: [String: Any] = ["access_token": access_token]
          // , "count": 1
    
          if since_id > 0 {
              parameters["since_id"] = since_id
          } else if max_id > 0 {
              // 别人传递了max_id.添加到字典里面
              parameters["max_id"] = max_id - 1
          }
    
          HMNetworkTool.shared.request(method: .GET, URLString: urlString, parameters: parameters, progress: nil, success: { (_, result) in
    
              // 获取返回数据中的微博数据
              if  let dict = result as? [String: Any],
                  let array = dict["statuses"] as? [[String: Any]] {
                  // 4.缓存网络加载的数据到本地数据库
                  self.saveStatus(array: array)
    
                  // 5.返回数据给调用者
                  finish(array, nil)
              }
              }, failure: { (_, error) in
                  // 5.返回数据给调用者
                  finish(nil, error)
          })
    
      }
    }
    
  • 修改HMStatusListViewModel.swift中的loadStatus方法

    • 调用HMStatusDALloadStatus 方法
    • 闭包返回参数修改

      /**
      加载微博数据
      */
      func loadStatus(since_id: Int, max_id: Int, completion: @escaping ([HMStatusViewModel]?, Error?) -> Void) {
      
        if isLoadingStatus {
            let error = NSError(domain: "cn.itheima.com", code: -1, userInfo: ["原因" : "同时加载数据了"])
            completion(nil, error)
            return
        }
      
        isLoadingStatus = true
      
        HMStatusDAL.shared.loadStatus(since_id: since_id, max_id: max_id) { (array, error) in
            // 从网络加载微博数据完成
            self.isLoadingStatus = false
      
            if error != nil {
                print("出错了 \(error)")
                completion(nil, error)
                return
            }
      
            DispatchQueue.global().async(execute: {
                // 定义空数组保存模型数据
                var statusVMs = [HMStatusViewModel]()
      
                // 1遍历数组字典转模型
                for dict in array! {
                    let status = HMStatus(dict: dict)
      
                    let statusVM = HMStatusViewModel(status: status)
                    statusVMs.append(statusVM)
                }
      
                DispatchQueue.main.async(execute: {
                    completion(statusVMs, nil)
                })
            })
        }
      }
      
  • 打断点测试

results matching ""

    No results matching ""