【问题标题】:Change property value in Alamofire function call在 Alamofire 函数调用中更改属性值
【发布时间】: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

标签: swift alamofire


【解决方案1】:

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

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

iOS - swift 3 - DispatchGroup

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

Synchronous Alamofire Request with DispatchGroup

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多