ios - 未调用 Alamofire 完成处理程序

标签 ios iphone swift alamofire completionhandler

我目前正在尝试在 AlamoFire 完成处理程序中调用 prepareForSegue 方法,但它没有被调用。这是我的代码:

func loginMember (username: String, password: String, completionHandler: (String?, ErrorType?) -> ()) {

  let headers = [
    "Cache-Control": "no-cache",
    "Content-Type": "application/json"
  ]

  let parameters: [String: AnyObject] = [

    "grant_type" : "password",
    "username" : username,
    "password" : password,

  ]

      Alamofire.request(.POST, "\(baseURL)/oauth2/token", parameters: parameters, encoding: .JSON, headers: headers)
        .validate()
        .responseJSON { response in
          switch response.result {
          case .Success:

            guard let value = response.result.value else {
              completionHandler(nil, response.result.error)
              return
            }

            let swiftyJsonVar = JSON(value)

              accessToken = swiftyJsonVar["access_token"].stringValue

            print("This is the login response:\(swiftyJsonVar)")

          case .Failure(let error):
           print("Sorry there was an error: \(error)")

            return
          }

      }

    }

这是调用时的样子:

loginMember(username, password: password, completionHandler: { error in

  dispatch_async(dispatch_get_main_queue()) {
  self.performSegueWithIdentifier("loginToHomeSegue", sender: self)
  }
  }
)

关于为什么未调用 performSegueWithIdentifier 有任何想法吗?

最佳答案

您只是在输入保护语句的情况下才调用完成处理程序。您需要为获得访问 token 的情况和错误情况添加调用。

Alamofire.request(.POST, "\(baseURL)/oauth2/token", parameters: parameters, encoding: .JSON, headers: headers)
            .validate()
            .responseJSON { response in
                switch response.result {
                case .Success:

                    guard let value = response.result.value else {
                        completionHandler(nil, response.result.error)
                        return
                    }

                    let swiftyJsonVar = JSON(value)

                    accessToken = swiftyJsonVar["access_token"].stringValue

                    print("This is the login response:\(swiftyJsonVar)")

                    // Got the token, call handler
                    completonHandler(accessToken, nil)

                case .Failure(let error):
                    print("Sorry there was an error: \(error)")

                    // Got an error, call handler
                    completionHandler(nil, error)

                    return
                }
        }

关于ios - 未调用 Alamofire 完成处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37931498/

相关文章:

ios - 如何关闭 UIPageViewController?

ios - 在 iTunes 之外发布 iOS 应用程序的成本

iphone - 在 NSUserDefaults 中保存全局值是否安全/良好实践?

ios - 滚动/静态 UITableView 页脚

objective-c - Swift References 中的 _ 下划线代表什么?

ios - 如何在 TableViewcell 中为 Swift 保存 Firebase key

ios - 在 View Controller 生命周期中何时呈现 UIImagePickerController?

c# - 如何为 HTML <video> 标签缓存 mp4 视频?

iphone - UIAlert按钮大小

iPhone (Xcode) 界面生成器资源