gpt4 book ai didi

ios - 在 Swift 中退出后更改函数中的类变量无效

转载 作者:行者123 更新时间:2023-11-28 16:06:18 25 4
gpt4 key购买 nike

我有一个带有 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 中,当我使用断点时,我看到结果具有正确的值,但在函数之外它是空的。

数据对象的使用: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"]);

在这段代码中你启动了一个异步请求,这意味着你的打印代码在你收到你想要打印的数据之前就被执行了。

您需要在收到答案后实现您的代码,为了实现您需要向您的任务添加委托(delegate)并实现来自 NSURLSessionTaskDelegate 的正确方法。

关于ios - 在 Swift 中退出后更改函数中的类变量无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40219492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com