swift - 闭包代码不会在函数中执行

标签 swift closures

我有一个闭包,将 http 调用包装在一个函数中,该函数通过单击按钮调用。然而,当我调试时,我可以看到闭包内的代码从未执行,程序在到达闭包时完全跳出函数。

func getTheForeCast(city: String) {
    println("Function  getForecast city passed = : \(city)")

    var webAddress: String = "http://www.weather-forecast.com/locations/\(city)/forecasts/latest"

    println("Web address url : \(webAddress)")

    let url = NSURL(string: webAddress)
    println(url!)

// PROGRAM EXITS FUNCTION HERE

    let openbrowserSession = NSURLSession.sharedSession().dataTaskWithURL(url!) {
        (data, response, error) in   
        // in the following code, session returns data, error, and response
        println("In closure")

        if error == nil {
            // no errors, convert html to readable data
            var urlConverted = NSString(data: data, encoding: NSUTF8StringEncoding)

            println(urlConverted)

            // run this asynchronously using a grand central dispatch 
            dispatch_async(dispatch_get_main_queue()) { self.webview_displayWeather.loadHTMLString(urlConverted, baseURL: nil) } // dispatch

        } else if error != nil {
            println("Error loading page")
            println(error.description)    
        }           
    } // closure
} // func

感谢任何意见。

最佳答案

NSURLSession 创建的任务最初处于“暂停”状态。 您必须在创建任务后调用 resume():

let openbrowserSession = NSURLSession.sharedSession().dataTaskWithURL(url!) {
    (data, response, error) in

    // ...

}
openbrowserSession.resume()

否则什么也不会发生。

关于swift - 闭包代码不会在函数中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28251802/

相关文章:

swift - 我应该将 let 值放在 for 循环之外以获得更好的性能吗?

ios - 使用自定义选项卡栏 Controller 类在两个 View Controller 之间传递数据

ios - Swift 中的 ARC 在将属性分配为函数时如何解决强引用循环

javascript - 如何将参数传递给 jQuery ajax 请求的回调?

garbage-collection - Clojure 闭包和 GC

swift - 更新 UIAlertAction 处理程序中的 UI

具有关联类型的 Swift 协议(protocol) - 类型可能不会引用自身作为要求

swift - 将具有多个参数的函数分配给变量

closures - 在结构中存储闭包——无法推断出合适的生命周期

javascript - jQuery 点击函数传递参数