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

微博字典转模型

  • 定义 HMStatusViewModel,一个HMStatusViewModel包含一个微博模型
    /// 一个HMStatusViewModel包含一个微博模型
    class HMStatusViewModel: NSObject {
      var status: HMStatus
      init(status: HMStatus) {
          self.status = status
      }
    }
    
  • 完成 HMStatusListViewModelloadStatus 方法字典转模型

    /// 处理 HMStatus 相关操作,添加 loadStatus 方法来加载微博数据
    class HMStatusListViewModel: NSObject {
    
      static let shared: HMStatusListViewModel = HMStatusListViewModel()
    
      /**
       加载微博数据
       */
      func loadStatus() {
          // 判断accessToken是否为空
          guard let access_token = HMUserAccountViewModel.shared.userAccount?.access_token else {
              // accessToken为空
              return
          }
    
          // url
          let urlString = "2/statuses/home_timeline.json"
    
          // 参数
          let parameters = ["access_token": access_token]
    
          // 调用AFN GET请求
          HMNetworkTool.shared.request(method: .GET, URLString: urlString, parameters: parameters, progress: nil, success: { (_, result) in
    //            print("result: \(result)")
    
              // 定义空数组保存模型数据
              var statusVMs = [HMStatusViewModel]()
    
              // 获取返回数据中的微博数据
              if  let dict = result as? [String: Any],
                  let array = dict["statuses"] as? [[String: Any]] {
    
                  // 1遍历数组字典转模型
                  for dict in array {
                      let status = HMStatus(dict: dict)
    
                      let statusVM = HMStatusViewModel(status: status)
                      statusVMs.append(statusVM)
                  }
              }
              print("获取到微博模型 = \(statusVMs)")
    
              }) { (_, error) in
                  print("error: \(error)")
          }
      }
    }
    
  • 可以将网络返回的微博字典转成模型了
  • 转成模型后回调

    /**
    加载微博数据
    */
    func loadStatus(completion: @escaping ([HMStatusViewModel]?, Error?) -> Void) {
      // 判断accessToken是否为空
      guard let access_token = HMUserAccountViewModel.shared.userAccount?.access_token else {
          // accessToken为空
          return
      }
    
      // url
      let urlString = "2/statuses/home_timeline.json"
    
      // 参数
      let parameters = ["access_token": access_token]
    
      // 调用AFN GET请求
      HMNetworkTool.shared.request(method: .GET, URLString: urlString, parameters: parameters, progress: nil, success: { (_, result) in
    //            print("result: \(result)")
    
          // 定义空数组保存模型数据
          var statusVMs = [HMStatusViewModel]()
    
          // 获取返回数据中的微博数据
          if  let dict = result as? [String: Any],
              let array = dict["statuses"] as? [[String: Any]] {
    
              // 1遍历数组字典转模型
              for dict in array {
                  let status = HMStatus(dict: dict)
    
                  let statusVM = HMStatusViewModel(status: status)
                  statusVMs.append(statusVM)
              }
          }
    
          completion(statusVMs, nil)
          }) { (_, error) in
              completion(nil, error)
      }
    }
    
  • 修改 HomeTableViewController 中的方法调用

    /**
    加载微博数据
    */
    class CZHomeViewController: CZBaseTableViewController {
    
      override func viewDidLoad() {
          super.viewDidLoad()
          ...
    
          // 测试加载微博数据
          HMStatusListViewModel.shared.loadStatus { (statusVMs: [HMStatus]?, error: Error?) in
    
              if error != nil {
                  print("加载微博数据出错 error: \(error)")
                  return
              }
    
              print("加载到微博数据: \(statusVMs)")
          }
      }
    }
    

results matching ""

    No results matching ""