我想尝试使用NSURLSession来获取RSS数据,看看它会是什么样子。我在Playground中编写了一大块代码,当它没有工作时,我扼杀了完成处理程序代码并输入了一个打印(" hello,world")来验证块是否正在运行。
let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
let task = session.dataTaskWithURL(NSURL(string:"http://apod.nasa.gov/apod.rss")!, completionHandler:
{(data:NSData?, response:NSURLResponse?, error:NSError?) in
print("hello, world")
}
)!
task.resume()
在Playground中,没有任何内容打印到控制台。但是我把这个代码放到了Xcode项目中,它运行得很好。为什么呢?
答案 0 :(得分:1)
我在尝试使用NSURLSession时遇到了这个问题。首先,您需要import XCPlayground
,并致电XCPSetExecutionShouldContinueIndefinitely()
。这将允许代码异步运行。
我无法告诉你为什么完全打印不起作用。我所知道的是,我对同样的问题感到困惑,直到我对数据进行快速可选绑定(所有完成闭包的参数都是选项,请注意)。无论出于何种原因,这都有效,并且您的打印声明会被打印出来。
let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
let task = session.dataTaskWithURL(NSURL(string:"http://apod.nasa.gov/apod.rss")!, completionHandler:
{(data:NSData?, response:NSURLResponse?, error:NSError?) in
if let data = data
{
print("hello, world")
}
}
)!
task.resume()
答案 1 :(得分:1)
“XCPSetExecutionShouldContinueIndefinitely”已被弃用,现在您可以执行以下操作:
import XCPlayground
//create instance of current playground page
let page = XCPlayground.XCPlaygroundPage
page.currentPage.needsIndefiniteExecution = true
//create your completion handler function
func completionHandlerFunction(callBack: (message: String, error: ErrorType?) -> Void){
callBack(message: "finish", error: nil)
}
//call the the completion handler function
completionHandlerFunction { (message, error) -> Void in
print(message) //output on the right side will be "finish\n"
//perform .finishExecution() on current page when block is executed
page.currentPage.finishExecution()
}
答案 2 :(得分:0)
当我尝试从URL completeHandler内部进行打印时,这对我有用:
class