我正在使用 Alamofire API 模块开发 iOS 天气应用程序。我编写了从网络获取天气更新信息的代码,当我在获取信息后打印它时,我得到了它,但我无法让该信息显示在我的 View Controller 中。
这是代码。
public var cityName:String{
if _cityName==nil{
_cityName = "Didn't find any"
}
return _cityName
}
public var weatherType:String{
if _weatherType==nil{
_weatherType="oops"
}
return _weatherType
}
public var currentTemp: Double{
if _currentTemp==nil{
_currentTemp=0.0
}
return _currentTemp
}
public var date: String{
if _date==nil{
_date=""
}
let dateFormatter=DateFormatter()
dateFormatter.dateStyle = .long
dateFormatter.timeStyle = .none
let currentDate = dateFormatter.string(from: Date())
self._date = "Today, \(currentDate)"
return _date
}
func downloadWeatherDetails(completed: DownloadComplete){
let currentWeatherURL = URL(string: CURRENT_WEATHER_URL)!
Alamofire.request(currentWeatherURL).responseJSON{
response in
let result = response.result
if let dict = result.value as? Dictionary<String, AnyObject>{
if let name = dict["name"]as? String{
self._cityName=name.capitalized
print(self._cityName)
}
if let weather = dict["weather"]as? [Dictionary<String, AnyObject>]{
if let main = weather[0]["main"] as? String{
self._weatherType=main.capitalized
print(self._weatherType)
}
}
if let main = dict["main"] as? Dictionary<String, AnyObject>{
if let currentTemp = main["temp"] as? Double{
let kelvintoCelcius = (currentTemp - 273.15)
self._currentTemp=kelvintoCelcius
print(self._currentTemp)
}
}
}
}
completed()
}
最佳答案
在 ViewController.swift 中添加此函数:
func downloadWeatherDetails(callback: @escaping (CurrentWeather)->Void){
var currentWeather = CurrentWeather()
let currentWeatherURL = URL(string: CURRENT_WEATHER_URL)!
Alamofire.request(currentWeatherURL).responseJSON{
response in
let result = response.result
if let dict = result.value as? Dictionary<String, AnyObject>{
if let name = dict["name"]as? String{
currentWeather._cityName=name.capitalized
print(currentWeather._cityName)
}
if let weather = dict["weather"]as? [Dictionary<String, AnyObject>]{
if let main = weather[0]["main"] as? String{
currentWeather._weatherType=main.capitalized
print(currentWeather._weatherType)
}
}
if let main = dict["main"] as? Dictionary<String, AnyObject>{
if let currentTemp = main["temp"] as? Double{
let kelvintoCelcius = (currentTemp - 273.15)
currentWeather._currentTemp=kelvintoCelcius
print(currentWeather._currentTemp)
}
callback(currentWeather)
}
}
}
将 viewDidLoad 替换为:
override func viewDidLoad() {
super.viewDidLoad()
self.downloadWeatherDetails {
newWeather in
currentWeather = newWeather
self.updateMainUI()
}
}
关于swift - Alamofire 项目,我在当前函数中得到响应,但在另一个父类中没有得到响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42369638/