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()
}
}
ブロックが完了した後で変数にアクセスしていますか?それのようなニラは非同期に実行されます。 – Eiko
私はあなたがself.temperatureFを使用しなければならないと思います。 – ryantxr
ところで、あなたはxcodeに関する質問をしていないので、xcodeタグを使用しないでください。ありがとう。 – ryantxr