2016-11-02 20 views
1

通貨交換データを取得するJSON関数がありますが、この関数はJSON要求を28回ごとに再送信しています。ここに私のコードは次のとおりです。Swift - JSON関数が正しく更新されない

func fetchPrice() { 
let url = URL(string: "http://finance.yahoo.com/webservice/v1/symbols/EURUSD=x/quote?format=json") 
let data = try? Data(contentsOf: url!) 

do { 
    let object = try! JSONSerialization.jsonObject(with: data!) as? NSDictionary 

    if let dictionary = object as? [String: AnyObject] { 
     let title = object?["list"] as! [String:Any] 
     let title2 = title["resources"] as! [AnyObject]? 
     let title3 = title2?[0] as! [String:Any]? 
     let title4 = title3?["resource"] as! [String:Any]? 
     let fields = title4?["fields"] as! [String:Any]? 

     let price = fields?["price"] as! String 

     print(fields?["price"] as! String) 
     print(fields?["ts"] as! String) 
     //print(NSDate().timeIntervalSince1970) 
     //print(dictionary) 

    } 
} 
} 

while true { 
    fetchPrice() 
    sleep(UInt32(1)) 
} 

URLは価格を毎秒を変更し、私は数秒の秒ごとにリフレッシュしようとすると、それが機能していません。私のプレイグラウンドを関数ではなく再コンパイルすると動作します。

答えて

0

タイマーを使用します。 stopFetchを呼び出すまで、beginFetchコードは毎秒フェッチを実行します。

var fetchTimer: Timer! 

    func beginFetch() { 
     var fetchCount = 0 
     fetchTimer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { timer in 
      fetchCount += 1 
      print("\n The timer has run \(fetchCount) times") 
      self.fetchPrice() 
     } 
    } 

    func stopFetch() { 
     fetchTimer.invalidate() 
    } 
+0

ありがとうございますが、これはまだ同じ問題があります。 –

+0

問題を明確化してください:フェッチ要求が実行されていないか、データを戻していませんか?それらは2つの異なる問題です。 –

+0

実行中ですが、同じ実行を繰り返すだけで間違ったデータが返されます。 –

関連する問題