私は簡単な問題があります。 RESTfulなサーバーに接続して接続しようとしています。私は応答を取得し、すべてが完璧に動作しますが、変数を設定する関数を呼び出そうとすると、変数が呼び出されません。Alamofire非同期呼び出し
コード:
//
// 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
をチェックする場所です:あなたはそれが非同期呼び出しを行っているので、あなたのlogin
方法で完了ハンドラを使用し、そのようにする必要があり
@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"
}
}
なぜあなたはその関数を実行していないと思いますか?その関数の中にブレークポイントを入れてデバッグしようとしましたか? –
Niravとの合意。 switch文の中で 'self.loginSuccess'を呼び出すのに問題があると仮定しています。上記のオプションのバインドで 'status'が設定されていることを確かめますか? –
はい、私はそれがself.loginSuccessを呼び出すことを確認しましたが、self.resultは決して変更されません。 –