我有一个带有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文件中,我是这样访问它的:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
但是,在函数
networkResponseHandler
中,当我使用断点时,我看到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.uData!.login();
print(appDelegate.uData!.result["result"]);
在这段代码中,您启动了一个异步请求,这意味着您的打印代码是在接收到要打印的数据之前执行的。
您需要在收到答案后实现您的代码,以便实现您需要在任务中添加一个委托并实现
NSURLSessionTaskDelegate
中的正确方法。关于ios - 在Swift中退出后,在函数中更改类变量无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40219492/