我有一个带有NSDictionary类型
变量的Data类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文件中,我可以像这样访问它:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
但是,在函数networkResponseHandler
中,当我使用断点时,我看到结果具有正确的值,但在函数外部它是空的。
使用Data对象: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"]);
}
答案 0 :(得分:1)
问题是您正在执行异步请求:
appDelegate.uData!.login();
print(appDelegate.uData!.result["result"]);
在此代码中,您启动了异步请求,这意味着您在接收要打印的数据之前执行了打印代码。
您需要在收到答案后实施代码,以实现您需要向任务添加委托并从NSURLSessionTaskDelegate
实施正确的方法。