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

HMUserAccountViewModel加载AccessToken后回调

  • HMUserAccountViewModelloadAccessTokenHMUserAccount 保存到沙盒后,控制器并不知道 加载AccessToken 的结果.需要通过闭包回调
  • HMUserAccountViewModelloadAccessToken 添加 completion: (Error?) -> Void 闭包

    // MARK: - 加载Access Token
    func loadAccessToken(code: String, completion: @escaping (Error?) -> Void) {
      ...
    
      HMNetworkTool.shared.request(method: HMNetworkMethod.POST, URLString: urlString, parameters: parameters, progress: nil, success: { (_, result) in
          print("result = \(result)")
          let dict = result as! [String: Any]
    
          // 字典转模型
          self.userAccount = HMUserAccount(dict: dict)
          print("userAccount = \(self.userAccount)")
          self.saveUserAccount()
    
          // 调用闭包,完成accessToken加载和保存
          completion(nil)
      }) { (_, error) in
          // 调用闭包,加载accessToken出错了
          completion(error)
      }
    }
    
  • HMOauthViewController 调用 HMUserAccountViewModelloadAccessToken 方法时,准备闭包

    // 判断后面是否跟有参数
    if let query = request.url!.query {
      let nsQuery = query as NSString
      let codeString = "code="
      // 判断query里面是否包含code=字符串
      if nsQuery.hasPrefix(codeString) {
          let code = nsQuery.substring(from: codeString.characters.count)
          print("拦截到code = \(code)")
    
          HMUserAccountViewModel.shared.loadAccessToken(code: code, completion: { (error: Error?) in
    
              if error != nil {
                  print("加载accessToken出错: \(error)")
                  SVProgressHUD.showError(withStatus: "您的网络不给力")
    
                  DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1, execute: { 
                      // 关闭授权控制器
                      self.close()
                  })
    
                  return
              }
    
              // 直接关闭控制器
              print("加载accessToken完成")
              self.close()
    
          })
      } else {    //点击取消
          close()
      }
    }
    

results matching ""

    No results matching ""