gpt4 book ai didi

swift - 执行 block 后变量为零

转载 作者:行者123 更新时间:2023-11-30 10:15:17 26 4
gpt4 key购买 nike

执行闭包后我很难赋值。

问题出在//step4中。它打印内容并且没有捕获零,但在 //step5 处它打印 Nil。

我尝试创建一个类并在 HTTP 请求中分配值,但没有任何变化。

我的代码:

var x: String!override func viewDidLoad() {
super.viewDidLoad()
//1
let urlAsString = "http://date.jsontest.com/"
let url = NSURL(string: urlAsString)!let urlSession = NSURLSession.sharedSession()
//2
let jsonQuery = urlSession.dataTaskWithURL(url, completionHandler: {
data, response, error - > Void in
if error != nil {
println(error.localizedDescription)
}
var err: NSError ?
//3
var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: & err) as!NSDictionary
if err != nil {
println("JSON Error \(err!.localizedDescription)")
}
//4
let jsonDate = jsonResult["date"] as!String
let jsonTime = jsonResult["time"] as!String
//Step 4
//let's Assume
x = jsonDate
println("Inside \(x)") // Prints Date :)
dispatch_async(dispatch_get_main_queue(), {
self.dateLabel.text = jsonDate
self.timeLabel.text = jsonTime
})
}) //end of JsonQuery
jsonQuery.resume()
//Step 5
println("Outside \(x)") // Prints nil
}

最佳答案

您的网络请求是异步请求。这意味着它将完成,并且将在未来的某个时刻调用完成 block 。调用 jsonQuery.resume() 后的一段时间。整个函数返回后很长一段时间。

你的变量在调用后不会回到nil - 你在它被设置为nil之前很久就检查了它。完成 block 的工作是完成处理数据和存储结果所需的一切。

关于swift - 执行 block 后变量为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30446824/

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