【问题标题】:Module 'Alamofire' has no member named 'SessionManager'模块“Alamofire”没有名为“SessionManager”的成员
【发布时间】:2021-02-06 05:06:45
【问题描述】:

为什么我会收到此错误,我没有。我已经在使用 Alamofire 5 时将 Alamofire 更改为 AF。请指导有什么问题和需要更改的地方。以下是我遇到错误的代码:

 private func callAlamoFireFormalData(makeThisFunction : @escaping (AFDataResponse<Any>)->Void )
{
    AF.request(url, method: httpMethod, parameters: paramters, encoding: encoding, headers: HTTPHeaders(self.headers ?? [:]))
        //.validate(statusCode: 200..<300)
        .responseJSON { response in
            
            //print("\(response.response?.statusCode)")
            guard response.response?.statusCode != 401
                else{
                    
                    Alamofire.SessionManager.default.session.getAllTasks { tasks in
                        tasks.forEach { $0.cancel() }
                    }
                    Helper.setApiToken(token: "")
                    Helper.removeUserInfo()
                    if var topController = UIApplication.shared.keyWindow?.rootViewController {
                        if let presentedViewController = topController.presentedViewController
                        {
                            topController = presentedViewController
                            topController.present(UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "InitialNAV"), animated: true, completion: nil)
                        }
                        
                        // topController should now be your topmost view controller
                    }
                    //                        Alamofire.pause()
                    return
            }
            
            switch response.result
            {
            case let .failure(error):
                
                print(error)
                self.serverResponse.error = true
                self.serverResponse.message = String.serverError
                self.serverResponse.content = nil
                self.serverResponse.statusCode = response.response?.statusCode
                makeThisFunction()
                
            case .success(let value):
                
                let json = JSON(value)
                self.serverResponse.error = json["error"].boolValue
                self.serverResponse.message = json["message"].stringValue
                self.serverResponse.content = json["content"]
                self.serverResponse.statusCode = response.response?.statusCode
                makeThisFunction()
                
            }
    }
    
}

【问题讨论】:

  • 在使用 Alamofire 时不应该使用getAllTasks 来取消任务。您应该使用来自 Session 的等效 API。

标签: ios swift iphone alamofire xcode11


【解决方案1】:

SessionManager 类在 Alamofire 5 中基本上重命名为 Session。所以你可以用这个替换你的实现:

Alamofire.Session.default.session.getAllTasks { tasks in
    tasks.forEach { $0.cancel() }
}

更新:正如@JonShier 在评论中提到的,取消所有请求的正确方法是调用SessioncancelAllRequests(completingOnQueue:completion:) 函数:

Alamofire.Session.default.cancelAllRequests()

【讨论】:

  • 仅供参考,取消 Alamofire 中的所有请求应通过 Session.cancelAllRequests 完成,而不是直接在任务上完成。
猜你喜欢
  • 2015-04-17
  • 1970-01-01
  • 2017-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-15
相关资源
最近更新 更多