ios - Alamofire 无法更新类属性数据

标签 ios swift

您好,我正在尝试使用 alamofire 下载 json 天气数据。 这是我的代码,工作版本:

class WeatherModel {
  private var _date: String?
  private var _location: String?
  private var _weatherType: String?
  private var _temperature: Double?

  func getWeatherInfoFromAPI(completed: @escaping ()-> ()) {
    let url = URL(string: WEATHER_URL)!
    Alamofire.request(url).responseJSON(completionHandler: { response in
    // Test updating data
    self._temperature = 25
    self._weatherType = "Clear"
    self._location = "Vietnam"
    completed()
    })

  }
}

-> 这样,我就可以更新类的属性。

无法更新 getWeatherInfoFromAPI 函数的类属性版本:

      func getWeatherInfoFromAPI(completed: @escaping ()-> ()) {
        let url = URL(string: WEATHER_URL)!
        Alamofire.request(url).responseJSON{ response in
        // Test updating data
        self._temperature = 25
        self._weatherType = "Clear"
        self._location = "Vietnam"  
    }
    completed()
  }

所以,我不知道它们之间有什么区别。请帮我在这里澄清两种方式。

Alamofire.request(url).responseJSON(completionHandler: { response in })

Alamofire.request(url).responseJSON{ response in }

我的代码不起作用的原因是什么?因为我看到 Alamofire 文档也像第二种方式一样使用!我在考虑它们之间的线程差异

此外,我如何知道代码在 responseJSON 中运行的线程?

谢谢,我感谢你的时间和帮助!

最佳答案

这两种方式在功能上是相同的,第二种方式只是使用 Swift 的尾随闭包语法。

你在 completed() 中做了什么?因为在第一个示例中,您是在网络调用完成后调用它,而在第二个示例中,您是在开始 网络调用后立即调用它 - 调用尚未完成。你应该在 Alamofire 回调中调用 if ,就像第一个例子一样。在第二个示例中,如果您正在检查 completed 中的那些属性,那么它们还没有更新也就不足为奇了。

关于ios - Alamofire 无法更新类属性数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45075007/

相关文章:

ios - 在 iOS 中使用 Core Data 保护数据

swift - "The file "MyApp.app "couldn' t被打开,因为你在 Xcode 6 Beta 4 中运行应用程序时没有 't have permission to view it"

ios - 警告 : CLSLog has been used before (or concurrently with) Crashlytics initialization and cannot be recorded

ios - AVPlayer 在模拟器上运行但不是真实设备

ios - 如何计算类属性中的项目? swift 语言

ios - AutoLayout 调整自定义 UIView 内容

ios - 将 UIImage 绘制为一个没有离屏渲染的圆圈

ios - 媒体查询像素比率不起作用

ios - 自定义 subview 未在 xib 中加载

IOS Swift 表格 View : Is there a way to move first cell one row down