如何在Playground中运行异步回调

如何在Playground中运行异步回调,第1张

概述许多Cocoa和CocoaTouch方法具有在Objective-C和Closures中实现为块的完成回调。但是,当在Playground中尝试这些时,完成不会被调用。例如: // Playground - noun: a place where people can playimport Cocoaimport XCPlaygroundlet url = NSURL(string: " 许多Cocoa和Cocoatouch方法具有在Objective-C和Closures中实现为块的完成回调。但是,当在Playground中尝试这些时,完成不会被调用。例如:
// Playground - noun: a place where people can playimport Cocoaimport XCPlaygroundlet url = NSURL(string: "http://stackoverflow.com")let request = NSURLRequest(URL: url)NSURLConnection.sendAsynchronousRequest(request,queue:NSOperationQueue.currentQueue() {response,maybedata,error in    // This block never gets called?    if let data = maybedata {        let contents = Nsstring(data:data,enCoding:NSUTF8StringEnCoding)        println(contents)    } else {        println(error.localizedDescription)    }}

我可以在我的Playground时间轴看到控制台输出,但在我的完成块中的println从来不叫…

虽然你可以手动运行一个运行循环(或者,对于不需要运行循环的异步代码,使用其他等待方法,如dispatch semaphores),我们在playgrounds中提供的等待异步工作的“内置”方法是:导入XCPlayground框架并设置XCPlaygroundPage.currentPage.needsIndefiniteExecution = true。如果这个属性已经设置,当你的顶级playground源完成,而不是停止playground,我们将继续旋转主运行循环,所以异步代码有机会运行。我们最终将在超时后终止playground,默认为30秒,但如果您打开助理编辑器并显示时间轴助手,可以配置;超时在右下方。

不幸的是,这个开发者预览不包括iOS的XCPlayground;仅适用于OSX。

使用有问题的代码的工作示例

import UIKitimport XCPlaygroundlet url = NSURL(string: "http://stackoverflow.com")let request = NSURLRequest(URL: url!)NSURLConnection.sendAsynchronousRequest(request,queue: NSOperationQueue.currentQueue()) { response,error in    if let data = maybedata {        let contents = Nsstring(data:data,enCoding:NSUTF8StringEnCoding)        println(contents)    } else {        println(error.localizedDescription)    }}XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
总结

以上是内存溢出为你收集整理的如何在Playground中运行异步回调全部内容,希望文章能够帮你解决如何在Playground中运行异步回调所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1061044.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存