如果Alamofire请求的响应为200或不响应,我将如何更改seque视图?

时间:2016-12-19 00:08:38

标签: swift alamofire apple-tv

所以我正在开发一个应用程序,它登录到我也在使用alamofire的东西。现在我想做的是当连接的响应代码为200(成功)时将其转到新视图,然后当响应代码为204(失败)时转到不同的窗口我在swift 3中写这个。

这是我目前的IBAction

 @IBAction func loginBtn(_ sender: Any) {

    self.dismiss(animated: true, completion: nil)
    self.performSegue(withIdentifier: "login", sender: isvalid200())

    self.dismiss(animated: true, completion: nil)
    self.performSegue(withIdentifier: "error", sender: isinvalid())

现在我知道这不是假设要做的,但这是我的想法。另外,这是我的错误处理代码。

func isvalid200(){

    Alamofire.request("https://myanimelist.net/api/account/verify_credentials.xml/\(user)/\(pass)")
        .validate(statusCode: 200..<200) // if error is 200
        .validate(contentType: ["application/json"])


       }


    func isinvalid() {


    Alamofire.request("https://myanimelist.net/api/account/verify_credentials.xml/\(user)/\(pass)")
        .validate(statusCode: 204..<204) // if error is 204
        .validate(contentType: ["application/json"])
    }

至于我得到的错误就是这个

MyAnime [7446:265163]&gt;的窗口不等于视图的窗口!

(没有self.dimiss,但有了它,它确实有效,但根据响应代码I.E 200或204,它不会停留在特定的窗口。

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:0)

尝试这样的东西,打开statusCode

@IBAction func loginBtn(_ sender: Any) {
   Alamofire.request("https://myanimelist.net/api/account/verify_credentials.xml/\(user)/\(pass)").responseJSON { [weak self] response in
      guard let strongSelf = self, let resp = response.response else { return }
    switch resp.statusCode {
       case 200:
          DispatchQueue.main.async {
            strongSelf.performSegue(withIdentifier: "login", sender: strongSelf)
          }
       case 204:
          DispatchQueue.main.async {
            strongSelf.performSegue(withIdentifier: "error", sender: strongSelf)
          }
       default:
        //Some other status code
    }
  }
}

要对正在发生的事情作出一些解释,请逐步分解:

  • 用户在输入用户名/密码后按下登录按钮
  • 您提出网络请求以验证凭据
  • 收到回复后,您可以根据状态代码
  • 处理此回复是否为有效用户
  • 此时,您只需执行必要的segue即可转换到下一个视图控制器。如果你想回到呈现视图控制器,你只能调用dismiss。