Я строю эту функцию в swift, которая делает HTTP-запрос для получения значения температуры, чем при этом значении, оно должно отображаться в приложении iPhone.
Так что это функция:
func getTemperatura()
{
NSLog("getTemperatura")
// qui devo fare una chiamata ed aggiornare la temperatura
var myURLString = "http://" + url!.link!+"/TEMP";
var temperatura = sendHttpRequestTemp(endPoint: myURLString)
self.labelTemp.text = String(format: "%.0f", temperatura);
self.labelDecimal.text = ".09";
self.humText.text = "30%";
temp = temp + 1;
}
это метод sendHttpRequestTemp, который возвращает значение типа Double.
func sendHttpRequestTemp(endPoint : String) -> Double{
let url = URL(string: endPoint)!
var valTemp = 0.0
var request = URLRequest(url: url)
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.httpMethod = "GET"
let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data,
let response = response as? HTTPURLResponse,
error == nil else { // check for fundamental networking error
print("error", error ?? "Unknown error")
return
}
guard (200 ... 299) ~= response.statusCode else { // check for http errors
print("statusCode should be 2xx, but is \(response.statusCode)")
print("response = \(response)")
return
}
let responseString = String(data: data, encoding: .utf8)
//RECUPERO I DATI RELATIVI ALLA TEMPERATURA:
var temperatura = responseString!.components(separatedBy: "$");
if(temperatura.count > 1){
print ("temperatura ricavata: \(temperatura[1])");
valTemp = Double(temperatura[1])!
}
// print("responseString = \(responseString)")
}
task.resume()
return valTemp
}
Он не работает правильно, поскольку метод sendHttpRequestTemp имеет тип Async, а затем возвращает температуру = 0,0 вместо правильного значения.
Метод getTemperatura () вызывается этим кодом каждые 60 секунд:
var tempTimer = Timer.scheduledTimer(timeInterval: 60.0, target: self, selector: Selector("getTemperatura"), userInfo: nil, repeats: true)
Есть ли способ правильно выполнить эту операцию?