2016-07-08 2 views
0

私はSwiftを使い慣れています。ビューの前にAFNetworkingクラスを初期化する方法を理解しようとすると、読み込まれました。私は、のviewDidLoad前に初期化されませんJSONファイルからクラスでこのviewDidLoadの前にSwiftでAFNEtworkingクラスを初期化するには

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

問題のように格納された変数をのViewControllerからクラスをされてアクセスしています。したがって、プロパティはデフォルト/空白です。 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) 
     }) 

    } 

} 

答えて

1

ここでの基本的な問題は、あなたのServerAnalyticsクラスは、ネットワーク呼び出しを使用してこれらの値を移入彼らは移入するつもりだとき、あなたが本当にを伝えることができないことを意味していることである - あるいは、彼らは全くれます何らかの理由でネットワーク要求が失敗した場合

viewDidLoadが実行される前にこれらの値が入力されていることを確認する代わりに、値が入力されているかどうかに関係なく、ビューコントローラに正しいことをする方法と、ServerAnalyticsクラスに値の準備が整ったらコントローラを表示します。デリゲートパターンを使用することは、UIKitのように、このための良い戦略と思われます。

+0

これは正しい考え方です。デリゲートパターン以外のいくつかのソリューションは、NSNotification、subject-observerデザインパターン、反応性のあるココアシグナルを送信することになります(ただし、すでにReactive Cocoaを使用している場合のみですが、この種の問題を解決するにはあまりにも重量があります)、YMMV。私は間違いなく**直接KVOを推奨していません**。最も基本的なアプリ以上のものに対して、それを実行可能なソリューションにするには、あまりにも多くの問題があります。 – fullofsquirrels

関連する問題