Ios 阿拉莫菲尔异步调用
我有一个简单的问题。我正在连接我的RESTful服务器并尝试连接。我得到了一个响应,一切都很完美,但是当我试图调用一个函数来设置一个变量时,它就是不调用它 代码:Ios 阿拉莫菲尔异步调用,ios,swift3,alamofire,Ios,Swift3,Alamofire,我有一个简单的问题。我正在连接我的RESTful服务器并尝试连接。我得到了一个响应,一切都很完美,但是当我试图调用一个函数来设置一个变量时,它就是不调用它 代码: // // LoginClass.swift // LoginApp // // Created by Tarek Adel on 12/3/16. // Copyright © 2016 Tarek Adel. All rights reserved. // import Foundation import Alamofi
//
// LoginClass.swift
// LoginApp
//
// Created by Tarek Adel on 12/3/16.
// Copyright © 2016 Tarek Adel. All rights reserved.
//
import Foundation
import Alamofire;
import UIKit;
class LoginClass {
var result: Bool = false;
var username: String
var password: String
init(username: String, password:String) {
self.username = username;
self.password = password;
}
func login() -> Void {
let data = [
"grant_type" : "password",
"username" : self.username,
"password" : self.password,
"client_secret":"xxxxxx",
"client_id":"xxxxxx",
"scope": ""
]
Alamofire.request("http://localhost:8000/oauth/token", method: .post, parameters: data)
.responseJSON { response in
//to get status code
if let status = response.response?.statusCode {
switch(status){
case 200:
self.loginSuccess();
default:
print("error with response status: \(status)")
}
}
//to get JSON return value
if let result = response.result.value {
let JSON = result as! NSDictionary
print(JSON)
}
}
}
func loginSuccess() {
self.result = true;
}
}
在这里,我检查了self.result
:
@IBAction func loginButton(_ sender: UIButton) {
let username = usernameTextField.text!;
let password = passwordTextField.text!;
let loginClass = LoginClass(username: username, password:password)
loginClass.login()
if(loginClass.result == true) {
resultLabel.text = "Correct!"
} else {
resultLabel.text = "Wrong Credentials"
}
}
您需要将完成处理程序与您的
login
方法一起使用,因为它正在进行异步调用,所以请使用您的登录方法创建一个completionHandler
,然后在该completionHandler
中执行该if条件
func login(completionHandler: (_ result: Bool) -> ()) {
let data = [
"grant_type" : "password",
"username" : self.username,
"password" : self.password,
"client_secret":"xxxxxx",
"client_id":"xxxxxx",
"scope": ""
]
Alamofire.request("http://localhost:8000/oauth/token", method: .post, parameters: data)
.responseJSON { response in
//to get status code
if let status = response.response?.statusCode {
switch(status){
case 200:
//to get JSON return value
if let result = response.result.value {
let JSON = result as! NSDictionary
print(JSON)
}
completionHandler(true)
default:
print("error with response status: \(status)")
completionHandler(false)
}
}
}
}
现在像这样调用这个登录方法
self.login { (result) in
if(result)
{
resultLabel.text = "Correct!"
}
else{
resultLabel.text = "Wrong Credentials"
}
}
注意:如果您还需要JSON响应,则使用两个参数Bool和Dictionary生成完成处理程序,并使用该参数传递JSON 您需要将完成处理程序与您的
login
方法一起使用,因为它正在进行异步调用,所以请使用您的login方法创建一个completionHandler
,然后在该completionHandler
中执行if条件
func login(completionHandler: (_ result: Bool) -> ()) {
let data = [
"grant_type" : "password",
"username" : self.username,
"password" : self.password,
"client_secret":"xxxxxx",
"client_id":"xxxxxx",
"scope": ""
]
Alamofire.request("http://localhost:8000/oauth/token", method: .post, parameters: data)
.responseJSON { response in
//to get status code
if let status = response.response?.statusCode {
switch(status){
case 200:
//to get JSON return value
if let result = response.result.value {
let JSON = result as! NSDictionary
print(JSON)
}
completionHandler(true)
default:
print("error with response status: \(status)")
completionHandler(false)
}
}
}
}
现在像这样调用这个登录方法
self.login { (result) in
if(result)
{
resultLabel.text = "Correct!"
}
else{
resultLabel.text = "Wrong Credentials"
}
}
注意:如果您还需要JSON响应,则使用两个参数Bool和Dictionary生成完成处理程序,并使用该参数传递JSON 为什么你们认为它并没有执行那个函数,你们把断点放在那个函数里面并试着调试它?同意Nirav。我假设您在switch语句中调用
self.loginsucess
时遇到问题。您确定在上面的可选绑定中设置了状态吗?是,我已经检查过它是否调用了self.loginsucess,但是self.result从未更改。您在哪里检查self.loginsucess
?您能告诉我们您的代码在哪里检查self.result
?为什么您认为它没有执行该函数,您是否已将断点放在该函数中并尝试调试它?同意Nirav。我假设您在switch语句中调用self.loginsucess
时遇到问题。你确定在上面的可选绑定中设置了状态吗?是的,我已经检查过它调用self.loginsucess,但是self.result从未更改。你在哪里检查self.loginsucess
?你能告诉我们你的代码在哪里检查self.result
?非常感谢,这真的helped@TarekAdel欢迎朋友:)非常感谢,真的helped@TarekAdel欢迎朋友:)