Si bien puede ejecutar un ciclo de ejecución manualmente (o, para el código asincrónico que no requiere un ciclo de ejecución, use otros métodos de espera como semáforos de envío), la forma "incorporada" que proporcionamos en los patios de recreo para esperar el trabajo asincrónico es importar el XCPlayground
marco y configurarXCPlaygroundPage.currentPage.needsIndefiniteExecution = true
. Si se ha establecido esta propiedad, cuando finalice la fuente del patio de recreo de nivel superior, en lugar de detener el patio de recreo allí, continuaremos girando el ciclo de ejecución principal, por lo que el código asincrónico tiene la oportunidad de ejecutarse. Eventualmente terminaremos el patio de recreo después de un tiempo de espera predeterminado de 30 segundos, pero que se puede configurar si abre el editor asistente y muestra el asistente de línea de tiempo; el tiempo de espera está en la parte inferior derecha.
Por ejemplo, en Swift 3 (usando URLSession
lugar de NSURLConnection
):
import UIKit
import PlaygroundSupport
let url = URL(string: "http://stackoverflow.com")!
URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data, error == nil else {
print(error ?? "Unknown error")
return
}
let contents = String(data: data, encoding: .utf8)
print(contents!)
}.resume()
PlaygroundPage.current.needsIndefiniteExecution = true
O en Swift 2:
import UIKit
import XCPlayground
let url = NSURL(string: "http://stackoverflow.com")
let request = NSURLRequest(URL: url!)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.currentQueue()) { response, maybeData, error in
if let data = maybeData {
let contents = NSString(data:data, encoding:NSUTF8StringEncoding)
println(contents)
} else {
println(error.localizedDescription)
}
}
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true