に出た後には効果がありません変更クラス変数は、私はNSDictionaryの型の変数を一つのデータクラスを持っているスウィフト
class Data {
var user : String;
var pass : String;
var result: NSDictionary;
init(user: String, pass: String) {
self.user = user;
self.pass = pass;
self.result = NSDictionary();
}
func networkResponseHandler(data: Foundation.Data?, response:URLResponse?, err:Error?) -> Void {
if err != nil { print(err); return; }
let jsonResult : NSDictionary = try! JSONSerialization.jsonObject(with: data! as Foundation.Data, options: .allowFragments) as! NSDictionary;
//print(jsonResult);
print(jsonResult["result"])
self.result = jsonResult.copy() as! NSDictionary;
}
func login() -> Bool {
let url = URL(string: "http://");
let task = URLSession.shared.dataTask(with: url!, completionHandler: networkResponseHandler);
task.resume();
return true;
}
}
このクラスのインスタンスはAppDelegateファイルであり、そしてイムは、このようにそれをaccesing:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
しかし、関数networkResponseHandler
では、ブレークポイントを使用すると結果に適切な値が含まれていますが、関数の外は空です。データオブジェクトの
用途:あなたは非同期要求を開始した。このコードでは
appDelegate.uData!.login();
print(appDelegate.uData!.result["result"]);
、それはあなたのことを意味しますViewControler.swift
@IBAction func bSignInPressed(_ sender: AnyObject) {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.uData = Data(user: tEmail.text!, pass: tPassword.text!);
appDelegate.uData!.login();
print(appDelegate.uData!.result["result"]);
}
データオブジェクトが使用されているコードを投稿せず、クラス自体とAppDelegateへの参照を送信しました。データオブジェクトはどこで作成しますか?どこでnetworkResponseHandlerを使用しますか? –
@MarcoPace質問を更新しました –
更新していただきありがとうございますが、まだコードがありません:ボタンを押した後にログインを実行することがわかりましたが、「結果」を求める場所は表示されません。アクセスしようとする場所にコードを追加できますか? –