在 Alamofire 函数调用中更改属性值
Posted
技术标签:
【中文标题】在 Alamofire 函数调用中更改属性值【英文标题】:Change property value in Alamofire function call 【发布时间】:2018-12-18 08:41:16 【问题描述】:我最近开始使用 Alamofire。我想使用 Alamofire 发送一个简单的 GET 请求:
import Alamofire
class Test
var url:String = "www.github.com"
var i: Int = 1
func change()
Alamofire.request(url, method:.get).responseString response in
self.i += 1
print(self.i)
print(i)
我想在 Alamofire 函数调用中将 Test 类的属性 i
从 1 更改为 2。并在控制台上打印结果,看看会发生什么。我希望输出将是
2 2
但真正的输出是
1 2
!!我对这个结果感到很困惑。为什么不是2 2
或2 1
而是1 2
?函数调用期间到底发生了什么?为什么属性不能更改?
【问题讨论】:
self.i 中的响应 += 1 print(self.i) 这个关闭器将在一段时间后执行(当服务器响应时) 真正的输出是真的!! 请求异步工作。响应很晚才返回。 你需要了解threading
和async
vs sync
【参考方案1】:
因为 Alamofire 请求是异步的,print(i)
函数在 print(self.i)
之前运行。你可以通过DispatchGroup()
等待 Alamofire 的结果来实现你想要的。但是,我不推荐它。
您可以获取有关在 Alamofire 上使用 Dispatch 的更多信息:
ios - swift 3 - DispatchGroup
为什么这是一种不好的方法@Rob 在下面的帖子中非常清楚地回答了它:
Synchronous Alamofire Request with DispatchGroup
【讨论】:
以上是关于在 Alamofire 函数调用中更改属性值的主要内容,如果未能解决你的问题,请参考以下文章