gpt4 book ai didi

swift - 将对象传递出响应处理程序

转载 作者:行者123 更新时间:2023-11-30 13:57:51 26 4
gpt4 key购买 nike

请帮助我理解为什么我无法更改/传递 http 请求中的对象。在下面的示例中,我声明了变量“someVar”并在请求处理程序中更改了它。然而,print 语句在 init 中和函数结束时都返回 5。

var someVar = 5

init () {

getHtml()

print(self.someVar)

}

func getHtml() {

Alamofire.request(.GET, "https://www.google.com/")
.response { (request, response, data, error) in

self.someVar = 10

}

print(self.someVar)

}

问题:

  1. 为什么在这两种情况下都没有打印出“10”?

  2. 如何更改请求处理程序中的对象?

对于错误的术语或者这是一个奇怪的问题,我提前表示歉意。我是 Swift 新手,这是我的第一个 Stack Overflow 问题。

最佳答案

1)它不会打印“10”,因为在这两种情况下

print(self.someVar)

之前执行
self.someVar = 10

这是因为您的请求是异步请求。这意味着它将在完成时返回并触发您指定的完成 block 。但是,此请求不会阻止您的代码,因此会立即执行下一行。

2)您改变对象的方式是正确的并且有效。只是您看不到结果,因为您的两个 print() 都是在对象更改之前调用的。将代码更改为:

var someVar = 5

init () {

getHtml()

}

func printVar() {
print("My variable is now \(self.someVar)")
}

func getHtml() {

Alamofire.request(.GET, "https://www.google.com/")
.response { (request, response, data, error) in

self.someVar = 10
self.printVar()
}

print("My variable is still \(self.someVar)")

}

运行此代码,您将看到首先得到一行“我的变量仍然是 5”,然后经过一段延迟后,您将得到“我的变量现在是 10”。我希望这将帮助您了解异步请求中的完成处理程序如何工作。

我已将第二个 print() 放入一个单独的函数中,以说明如何调用某个函数来通知您的类请求已返回,现在可以使用附带的数据它。

关于swift - 将对象传递出响应处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33380818/

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