swift - Alamofire 项目,我在当前函数中得到响应,但在另一个父类中没有得到响应

标签 swift alamofire

我正在使用 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/

相关文章:

iOS - 无法调用非函数类型的值 'NSProgress'

ios - Parse 和 Swift - 带有 CLLocationManager 的 PFGeoPoint?

swift - 不能继承 DispatchGroup - "only visible via the Objective-C runtime"吗?

swift - 如何在 Swift 3 中将 "2017-01-09T11:00:00.000Z"转换为日期?

swift - 如何从 Swift 中的回调语句获取值

ios - 使用 Swift 3 的 Alamofire 4.0 出现 "has no member"错误

ios - 没有连接时,具有后台 session 配置的 NSURLSession 不会返回错误

swift - 使用 APNS 实时更新聊天应用程序(有或没有 AWS SNS)?

iOS swift 动画位置+约束

swift - UIGesture 识别器使应用程序崩溃