gpt4 book ai didi

ios - 无法在 NSURLConnection 函数之外访问字典的内容

转载 作者:行者123 更新时间:2023-11-30 14:16:41 25 4
gpt4 key购买 nike

我有一个函数,它接受一个字符串并返回一个通过 URL 请求填充的字典。我的函数将字符串分配给 JSON 对象,并使用 SwiftyJSON 检索。这些属性已更新,但退出 NSURLConnection.sendAsynchronousRequest 函数后,它们将无法访问。

因此,对于 1、2 和 3 println,数组打印正确,但在 4 上则不然。代码如下:

func parseJSON(id:String) -> Dictionary<String, JSON> {
var properties = [String:JSON]()
var postEndpoint = "http://localhost:3000/properties/\(id)"
var urlRequest = NSURLRequest(URL: NSURL(string: postEndpoint)!)

NSURLConnection.sendAsynchronousRequest(urlRequest, queue: NSOperationQueue(), completionHandler: {
(response:NSURLResponse!, data: NSData!, error: NSError!) -> Void in

if let anError = error {
println("error calling GET on /properties/\(id)")
}
else {
let post = JSON(data: data)
if let title = post["name"].string {
for (index: String, subJson:JSON) in post {
properties[index] = subJson
}
println("1: \(properties)")
}
else {
println("error parsing response from POST on /posts")
}
println("2 \(properties)")
}
println("3 \(properties)")
})
println("4 \(properties)")
return ds1Properties
}

还需要注意的是,4 在 1、2 和 3 之前打印,这让我认为 NSURLConnection 是稍后调用的,因此返回值不会在它之前更新留下 parseJSON 函数。

最佳答案

您需要了解异步的含义以及如何异步编程。

对于异步代码,每一行不是逐行执行,而是并行执行。

当您调用 parseJSON() 时,它将完成并立即返回,但在其中您调用了 sendAsynchronousRequest。这会启动另一个并行运行的线程(你知道什么是线程吗?)。该线程可能需要几秒钟才能完成。因此,步骤 1、2 和 3 可能要在步骤 4 之后几秒钟才会执行。

您不能将异步函数放入这样的同步函数中并期望它像“正常”函数一样工作。您需要设计代码来处理这种情况,包括调用 parseJSON 的代码 - 因为解析可能需要几秒钟,因此代码需要等待。如果您的应用程序有 GUI,那么如果您没有正确执行此操作,您的整个应用程序将挂起并卡住。

因此,当您使用异步性编写时,您的整个应用程序必须设计为能够正确处理它。

关于ios - 无法在 NSURLConnection 函数之外访问字典的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31080642/

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