如果来自 Alamofire 请求的响应是否为 200,我将如何更改后续视图

How would i go about changing seque views if the response is 200 or not from a Alamofire request

所以我正在开发一个可以登录我也在使用 alamofire 的东西的应用程序。现在我想做的是当连接的响应代码为 200(成功)时让它转到一个新视图,然后当响应代码为 204(失败)时转到另一个 windows 我正在写这在 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] > 的 window 不等于 的 window!

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

任何帮助都会很棒!

尝试像这样打开 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
    }
  }
}

为了对发生的事情给出一些解释,让我们逐步分解它:

  • 用户在输入 username/password
  • 后按下登录按钮
  • 您发出网络请求以验证凭据
  • 收到响应后,您可以根据状态码判断这是否是有效用户
  • 此时,您只需要执行必要的 segue 以过渡到下一个视图控制器。如果您想返回呈现视图控制器,您只会调用 dismiss。