我想创建一个调用服务器并获取 JSON 信息的小应用程序。服务器返回的是这样的:
{"temperature":23.60,"humidity":18.40}
我的代码是这样的:
let requestURL: NSURL = NSURL(string: "http://esp_0b48a1:1337/")!
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: requestURL as URL)
let session = URLSession.shared
let task = session.dataTask(with: urlRequest as URLRequest) {
(data, response, error) -> Void in
let httpResponse = response as! HTTPURLResponse
let statusCode = httpResponse.statusCode
if (statusCode == 200) {
print("Everyone is fine, file downloaded successfully.")
do{
let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String:AnyObject]
if let temp = json["temperature"] as? String {
self.degrees.text = temp + "°C";
print(temp);
}
if let hum = json["humidity"] as? String {
self.hum.text = hum + "%";
print(hum);
}
}catch{
print("error");
self.degrees.text = "no Temperature";
self.fill.text = "with";
self.degrees.text = "some errors like " + String(statusCode);
}
}
}
task.resume()
我正在我的 MainViewController 的 viewDidLoad 函数中执行它。 我得到输出“Everyone ist fine, file dl successfully”但没有更多输出。不是 do block 中的那个,也不是 catch 中的那个输出,它不会更改 UILabel。 但是在我的网络服务器上,我可以看到它收到了一个请求!
有什么想法吗? 我通过 http 连接并将 App Transport Security Settings 中的 Allow Arbitrary Loads 设置为 yes (info.plist)
扣篮 toast
最佳答案
转换为漂浮物应该会让你前进。我建议添加一个 else 来处理类型转换失败。
if let temp = json["temperature"] as? Float {
self.degrees.text = temp + "\(temp)°C";
print(temp);
}else{
//handle this outcome
}
if let hum = json["humidity"] as? Float {
self.hum.text = hum + "\(hum)°C";
print(hum);
}
else{
//handle this outcome
}
关于ios - Web 请求确实无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40597366/