简体   繁体   English

如何在viewDidLoad之前在Swift中初始化AFNEtworking类

[英]How do I initialize an AFNEtworking class in Swift prior to viewDidLoad

I'm new to Swift. 我是Swift的新手。 Trying to understand how to initialize my AFNetworking class prior to view did load. 试图了解如何在查看之前初始化我的AFNetworking类,但确实加载了。 I'm accessing the class from the ViewController like this 我正在像这样从ViewController访问类

var serverAnalytics = ServerAnalytics()
print(serverAnalytics.today)

Problem is the stored variables in the class from the JSON file do not initialize prior to viewDidload. 问题是来自JSON文件的类中的存储变量未在viewDidload之前初始化。 Therefore the properties are default/blank. 因此,属性为默认/空白。 Using AFNetworking and SwiftyJSON. 使用AFNetworking和SwiftyJSON。

import Foundation

class ServerAnalytics {

    let manager = AFHTTPSessionManager()
    var today:Double! = 0
    var complete:Bool! = false


    init(){
    manager.GET("http://www.somerandomjsonurl",
        parameters: nil,
        progress: nil,
        success: { (operation: NSURLSessionDataTask,responseObject: AnyObject?) in
            if let responseObject = responseObject {
                //print("Response: " + responseObject.description)
                let json = JSON(responseObject)
                 self.today = json["salesdata"]["list"][0]["todays_sales"].double!

            }

        },
        failure: { (operation: NSURLSessionDataTask?,error: NSError) in
            print("Error: " + error.localizedDescription)
        })

    }

}

The basic problem here is that your ServerAnalytics class is populating those values using a network call, meaning that you can't really tell when they're going to be populated - or if they will at all if the network request fails for some reason. 这里的基本问题是ServerAnalytics类正在使用网络调用填充这些值,这意味着您无法真正知道何时填充它们,或者如果网络请求由于某种原因失败,它们是否将完全填充。

So instead of thinking about how to make sure those values are populated before viewDidLoad runs, think about how to make your view controller do the right thing whether the values are populated or not, and how to have your ServerAnalytics class tell the view controller when the values are ready. 因此, viewDidLoad考虑如何在viewDidLoad运行之前确保这些值是否已填充,不如考虑如何使您的视图控制器正确地执行这些值(无论是否填充这些值),以及如何让ServerAnalytics类在视图ServerAnalytics告诉视图控制器时执行正确的操作值已准备就绪。 Using the delegate pattern, much like UIKit does, seems a good strategy for this. 与UIKit一样,使用委托模式似乎是一个不错的策略。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM