在 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 22 1 而是1 2?函数调用期间到底发生了什么?为什么属性不能更改?

【问题讨论】:

self.i 中的响应 += 1 print(self.i) 这个关闭器将在一段时间后执行(当服务器响应时) 真正的输出是真的!! 请求异步工作。响应很晚才返回。 你需要了解threadingasync vs sync 【参考方案1】:

因为 Alamofire 请求是异步的,print(i) 函数在 print(self.i) 之前运行。你可以通过DispatchGroup() 等待 Alamofire 的结果来实现你想要的。但是,我不推荐它。

您可以获取有关在 Alamofire 上使用 Dispatch 的更多信息:

ios - swift 3 - DispatchGroup

为什么这是一种不好的方法@Rob 在下面的帖子中非常清楚地回答了它:

Synchronous Alamofire Request with DispatchGroup

【讨论】:

以上是关于在 Alamofire 函数调用中更改属性值的主要内容,如果未能解决你的问题,请参考以下文章

js基础

在类函数中调用 Alamofire 时出错

如何调用系统关机函数

js 函数

包装在静态函数中时,Alamofire 4.0“调用中的额外参数'方法'”

Alamofire 4:无法调用非函数类型“HTTPURLResponse?”的值