【发布时间】:2017-02-08 14:26:45
【问题描述】:
嘿,我正在尝试使用来自 alamofire 请求的错误信息发出警报消息,但无论哪个视图处于活动状态,它都应该显示,因为这个请求是在单独的类上,我该怎么做?
请求类:
class Json {
var loginToken = ""
public func login(userName: String, password: String, loginCompletion: @escaping (_ JSONResponse : Any?, _ error: Error?) -> ()) {
let loginrequest = JsonRequests.loginRequest(userName: userName, password: password)
makeWebServiceCall(urlAddress: URL, requestMethod: .post, params: loginrequest, completion: { (json, error) in
loginCompletion(json, error)
})
}
public func device(token: String, loginCompletion: @escaping (_ JSONResponse : Any?, _ error: Error?) -> ()) {
let deviceinfo = JsonRequests.getInformationFromConfig(token: token, config: "wireless", section: "@wifi-iface[0]", option: "mode")
makeWebServiceCall(urlAddress: URL, requestMethod: .post, params: deviceinfo, completion: { (json, error) in
loginCompletion(json, error)
})
}
let manager = Alamofire.SessionManager.default
private func makeWebServiceCall (urlAddress: String, requestMethod: HTTPMethod, params:[String:Any], completion: @escaping (_ JSONResponse : Any?, _ error: Error?) -> ()) {
manager.session.configuration.timeoutIntervalForRequest = 5
manager.request(urlAddress, method: requestMethod, parameters: params, encoding: JSONEncoding.default).responseJSON{ response in
print(response.timeline)
switch response.result {
case .success(let value):
let json = JSON(value)
if let message = json["error"]["message"].string, message == "Access denied" {
// LoginVC.performLogin(UserDefaults.standard.value(forKey: "saved_username"),UserDefaults.standard.value(forKey: "saved_password"))
print("Access denied")
}
if let jsonData = response.result.value {
completion(json, nil)
}
case .failure(let error):
completion(nil, error)
}
调用函数:
public class LoginModel {
var loginToken = ""
internal func JsonResult (param1: String, param2: String){
Json().login(userName: param1, password: param2) { (json, error) in
print(json)
print(error)
if error != nil {
//Show alert
return
}
//Access JSON here
if let jsonResponse = json {
let jsonDic = JSON(jsonResponse)
print(jsonDic)
//Now access jsonDic to get value from the response
for item in jsonDic["result"].arrayValue {
self.loginToken = item["ubus_rpc_session"].stringValue}
print(self.loginToken)
if (jsonDic["result"].exists()){
print(jsonDic["result"]["ubus_rpc_session"].stringValue)
if (jsonDic["result"].arrayValue.contains("6")) {
self.loginToken = "6"
} else {
for item in jsonDic["result"].arrayValue {
self.loginToken = item["ubus_rpc_session"].stringValue
UserDefaults.standard.setValue(self.loginToken, forKey: "saved_token")
print(self.loginToken)
}
}
}
print("No result")
}
}
self.JsonDevice(param1: (UserDefaults.standard.value(forKey: "saved_token")! as! String))
}
【问题讨论】:
-
您在问如何显示警报吗?不清楚。
-
是的,我需要显示警报,但是这个alamofire请求在类中是分开的,所以无论打开哪个视图都应该显示警报
-
@EgleMatutyte 你为什么不使用你的
completionHandler。 -
我认为您的问题不直接与 alamofire 有关,而是与显示警报有关。您可能需要查看the documentation。
-
我该怎么做?我很困惑,因为我想在失败后立即发出警报,如何在完成处理程序中识别错误?
标签: json swift alert alamofire uialertcontroller