2016-04-27 23 views
1

私の関数でAPI呼び出しを行い、クラス変数temperatureFの値をAPI呼び出しの値で変更しようとしています。 APIが処理中で、エラーメッセージが表示されませんが、変数は変更されていません。私のコードは以下の通りです。セキュリティ上の理由からAPIのURLが変更されました。私もメインキューにself.temperature行をディスパッチしようとしましたが、どちらもうまくいきませんでした。完了ハンドラで変数が設定されていません

class weatherModel { 

    var temperatureF : Float? = 1 

    func readWeather(){ 

     let postEndpoint: String = "myurl.com" 
     guard let weatherUrl = NSURL(string: postEndpoint) else { 
      print ("Error: cannot create URL") 
      return 
     } 
     let urlRequest = NSURLRequest(URL: weatherUrl) 

     let config = NSURLSessionConfiguration.defaultSessionConfiguration() 
     let session = NSURLSession(configuration: config) 

     let task = session.dataTaskWithRequest(urlRequest) { 
      (data: NSData?, response: NSURLResponse?, error: NSError?) in 

      guard let responseData = data else { 
       print("Error: did not receive data") 
       return 
      } 

      guard error == nil else { 
       print("error calling GET on /posts/1") 
       print(error) 
       return 
      } 
      // parse the result as JSON, since that's what the API provides 
      let post: NSDictionary 
      do { 
       post = try NSJSONSerialization.JSONObjectWithData(responseData, 
        options: []) as! NSDictionary 
      } catch { 
       print("error trying to convert data to JSON") 
       return 
      } 

      self.temperatureF = post["current_observation"]!["temp_f"] as? Float 


    } 
    task.resume()  
} 
} 
+0

ブロックが完了した後で変数にアクセスしていますか?それのようなニラは非同期に実行されます。 – Eiko

+0

私はあなたがself.temperatureFを使用しなければならないと思います。 – ryantxr

+1

ところで、あなたはxcodeに関する質問をしていないので、xcodeタグを使用しないでください。ありがとう。 – ryantxr

答えて

0

これで動作します。変数へのアクセス方法に問題がありました。すべての提案をありがとう。

関連する問題