如何在 Playground 中运行异步回调

2023-12-25

许多 Cocoa 和 CocoaTouch 方法都具有在 Objective-C 中作为块实现的完成回调以及在 Swift 中作为闭包实现的回调。然而,当在 Playground 中尝试这些时,永远不会调用完成。例如:

// Playground - noun: a place where people can play

import Cocoa
import XCPlayground

let 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在我的完成块中从未被调用过......


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

例如,在 Swift 3 中(使用URLSession代替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

或者在 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Playground 中运行异步回调 的相关文章

  • 如何在 iOS swift 中集成 Google Pay?

    嗨 朋友们 我搜索过有关 iOS swift 中谷歌支付集成的信息 我没有找到任何相关的解决方案 请帮助我如何解决这个问题 如果有任何链接或示例 请提供链接并指导我 谢谢 这是关于在印度发起 Google Pay 操作的问题吗 例如 使用
  • 如何在 Swift 中退出“DispatchQueue.main.asyncAfter”

    我想在调用 deinit 时退出 DispatchQueue main asyncAfter 子视图 swift DispatchQueue main asyncAfter deadline now 5 0 self doSomething
  • 重新定位时 Mapbox 默认的 compassView 会给出奇怪的结果

    我遇到一种情况 必须将地图框罗盘视图重新定位到不同的位置 当我以其他点作为其 compassView 轴旋转地图时 compassView 现在正在旋转 并给了我一个奇怪的结果 附截图 黑色mapBox默认罗盘图标是旋转的 参考截图 这是
  • 切换到 Xcode 7 后,应用程序大小从 9 MB 增长到 60 MB,有解决办法吗?

    我一直在回顾 Git 历史来寻找文件大小发生巨大变化的原因 但我能找到的唯一真正原因是从 Xcode 6 切换到 Xcode 7 GM 我发现这些是文件大小贡献最大的 10 个 ipa创建自Archive操作在一个Release构建配置 u
  • Swift 3 GCD API 更改后的dispatch_once

    新语法是什么dispatch once在语言版本 3 中进行更改后的 Swift 中 旧版本如下 var token dispatch once t 0 func test dispatch once token These 对 libdi
  • Swift 3/4 dash 转驼峰式 (Snake 转驼峰式)

    我正在尝试执行一个简单的破折号到驼峰案例 在 swift 3 或 4 中 this is my id 将变成 thisIsMyId 无论我做什么 我都找不到足够优雅的方法来做到这一点 以下不起作用 str split separator e
  • 如何使用 SwiftUI 拖动工作滑块

    我想拖动一个滑块 当然也让它滑动 我可以做其中之一 但我不能两者都做 如何拖动并拥有可用的滑块 我也尝试找到一种方法来删除手势 但我找不到方法来做到这一点 还尝试了 Apple Composition SwiftUI Gestures 文档
  • javascript 闭包和对象引用

    我的情况有点晦涩难懂 主要是因为我认为我已经掌握了闭包 所以基本上我想要的是将集合重置为默认值 假设我有一个集合 它具有带有对象参数数组的构造函数 var c new collection x y z 然后集合定期更新 因为我没有保留数组的
  • iOS swift 应用程序启动时出现黑屏

    我有个问题 当我启动我的应用程序时 会看到黑屏几秒钟 然后出现启动屏幕 我的启动画面不是默认的 我使用了视图控制器 因为我的启动画面有一个动画 我搜索了一个解决方案 我得到了这个 在我的闪屏加载 iPhone 之前出现黑屏 https st
  • 正在解除分配时尝试加载视图控制器的视图... UISearchController

    我有创建一个的代码UISearchController in my UIVIew sviewDidLoad self resultSearchController let controller UISearchController sear
  • Swift:如何在 println 之后刷新标准输出?

    如何在 Swift 中刷新标准输出println命令 也就是说 Swift 相当于什么fflush stdout in C 您可以使用 fflush stdout 导入 libc 后 if os Linux import Glibc els
  • 如何过滤掉数组的数组

    您好 我有一个包含多个值的数组 我想尝试过滤掉搜索栏的索引 英语术语的一个例子是这样的 给我名称 Name2 的索引 并通过检查每个索引的第一个值中的所有字符串来执行此操作 Code Multiple Errors var received
  • Swift 中的弹出视图

    我有一个弹出视图 没有选项卡栏 它弹出到带有选项卡栏的视图控制器 在带有选项卡栏的视图控制器中 我设置了一个单击按钮 以便弹出视图控制器 IBAction func PopUpClicked sender UIButton gt Void
  • 在 Swift 中将 Int 转换为 UInt32

    我正在制作一个 Tcp 客户端 因此使用CFStreamCreatePairWithSocketToHost它期望第二个参数为 UInt32 这是我正在尝试做的事情的示例 func initNetwork IP String Port In
  • 在 MVC4 中使函数异步时 HttpContext.Current null

    我目前正在 VS2010 SP1 中开发 MVC4 我做了其中一个功能 控制器类异步 作为其中的一部分 我制作了控制器类 派生自 AsyncController 并添加了以下两个方法 参见代码部分 1 和 2 下 一种以 Async 结尾的
  • 如何在 Swift 中使用 CGFloat?

    var posinonY Float Float y Float pipeDown size height Float verticalPipeGap pipeDown position CGPointMake 0 0 Float posi
  • Node.js - 异步 JSON 查询

    如果这是一个愚蠢的问题 我深表歉意 但我对 Javascript 很陌生 而 Node js 确实让我很头疼 因为它是异步的 我的目标是从 API 查询 JSON 对象并能够使用它 我试图寻找关于我应该做什么的问题和答案 但它们对我来说都没
  • swift 中的负数模

    负数模如何在 swift 中工作 当我执行 1 3 时 它给出 1 但余数是 2 其中有什么问题 雨燕余数运算符 计算余数 整数除法 a b a a b b where 是截断整数除法 在你的情况下 1 3 1 1 3 3 1 0 3 1
  • 在 Swift 中检查一个数组是否包含另一个数组的所有元素

    我想为数组编写一个扩展来检查一个数组是否包含另一个数组的所有元素 在我的用例中它是字符串对象 但我一直得到 Cannot convert value of type T Generator Element to expected argum
  • 打印附加结构(swift 4)

    我有三个 textifled 用于将数据附加到结构中 如何打印我附加的内容 现在我收到一条错误消息 import UIKit class ViewController UIViewController IBOutlet var c UITe

随机推荐

  • 更新不同深度的嵌套字典的值

    我正在寻找一种更新字典的方法dictionary1与 dict 的内容update不覆盖levelA dictionary1 level1 level2 levelA 0 levelB 1 update level1 level2 leve
  • 如何从 Groovy 中的对象获取嵌套属性值?

    考虑在 Groovy 中您有类型的情况Company class Company def name def contactPerson and contactPerson of Contact type class Contact def
  • 使用指针访问未对齐的结构成员

    我有以下结构 typedef struct attribute packed uint16 t a uint32 t b st t gt b 成员未对齐 当我执行以下操作时 gcc 会发出警告 st t st uint32 t b p st
  • 如何在 C# 中将自定义 propertyGrid 与标准控件连接?

    我正在创建一个图形程序 我希望允许用户能够更改他们创建的图形的外观 为他们提供更改系列颜色 数据点大小等的机会 我允许他们通过使用 propertyGrid 来做到这一点 然而 在使用 Stack Overflow 的优秀人员的帮助下 我能
  • Javascript 中的经典字数统计算法

    拜托 伙计们 我哪里错了 经典的字数统计算法 给定一个字符串数组 返回一个 Map 每个字符串都有一个键 不同的字符串 其值是该字符串在数组中出现的次数 wordCount a b a c b a 2 b 2 c 1 wordCount c
  • URL 中的奇怪字符

    在我的网络服务器中 当用户请求带有奇怪字符的 URL 时 我会删除这些字符 系统会记录这些情况 当我检查已消毒的箱子时 我发现了这些 我很好奇这些 URL 的目的是什么 我检查了 IP 这些都是真实的人 并且像普通人一样使用网站 但这些人的
  • vim中将制表符替换为空格

    我想在 gVim 中将制表符转换为空格 我将以下行添加到我的 vimrc set tabstop 2 它可以在两个空格处停止 但看起来仍然像插入了一个 tab 键 之后我尝试使用 h 键来计算空格数 我不知道应该怎么做才能让 gVim 将制
  • 在 iOS 上使用 OpenAL 进行声音捕捉

    我正在尝试使用 OpenAL 在 iOS 上进行声音捕获 我正在编写一个跨平台库 这就是为什么我避免使用特定于 iOS 的声音录制方式 开箱即用的 OpenAL 捕获不起作用 但存在一个已知的解决方法 在开始捕获之前打开输出上下文 http
  • 当前上下文中不存在名称“ViewBag” - Visual Studio 2015

    我再次开始使用 ASP NET 进行开发 但在 Visual Studio 中遇到了一个小错误 我的 cshtml 文件在使用一些 razor 函数时显示错误 例如 名称 ViewBag 在当前上下文中不存在 这是一张图片 我正在使用一个演
  • 如何用长文本填充DIV并在溢出时显示省略号

    我有以下 JSFiddle http jsfiddle net ofrj55j4 21 http jsfiddle net ofrj55j4 21 如何在显示省略号之前在 DIV 中显示尽可能多的文本 现在只显示一行 HTML div cl
  • 是否可以在javascript中创建固定长度的数组?

    在Javascript中 是否可以创建一个保证长度保持不变的数组 例如 数组A创建的长度为 2 随后 任何调用的尝试A push or A pop 或设置值A 5 将失败 A length永远是 2 这是输入数组的方式 例如Float32A
  • 选择列表框中的项目后打开新表单

    我的表单上有一个列表框和一个按钮 列表框包含 3 个元素 房屋 人物 户外 我还创建了 3 个表单来表示列表框中的值 我希望用户突出显示列表框中的项目 单击按钮后我想打开用户选择的表单 我怎样才能实现这个目标 我已经尝试过这个链接 通过单击
  • groovy 脚本中提供的名称无效(机制级别:KrbException:无法找到默认领域)

    我有一个连接到 MSSQL 数据库的 groovy 脚本 几周前它工作得很好 但今天我上传了 mac os 的最后一个版本 我的脚本给了我这个例外 Caught java sql SQLException I O Error GSS Fai
  • d3.js:强制布局中建议的节点位置

    我想创建一个图表 其中节点具有建议的位置 但我也想使用力布局来确保节点本身不重叠 这在d3中可能吗 是的 您可以通过以下方式执行此操作 禁用默认的重力和电荷力 实施碰撞检测 http mbostock github com d3 talk
  • Dockerhub 的访问令牌

    我创建了一个存储库hub docker com现在想要使用我的凭据将我的映像推送到 Dockerhub 我想知道是否必须使用我的用户名和密码 或者是否可以创建某种访问令牌来推送 docker 映像 我想做的是使用docker image来自
  • 如何找到 php_smart_string.h 而不是 php_smart_str.h?

    It s me tmp pear install inclued 0 1 3 make bin bash tmp pear install inclued 0 1 3 libtool mode compile cc I I tmp pear
  • 创建 DLL 以在两个进程之间共享内存

    我需要使用 DLL 来实现类似于 Linux 共享内存的功能 我的Windows编程经验很少 但我认为有可能实现我的目标 我想要类似下面的东西 DLL int x void write int temp x temp int read re
  • Webpack 错误:请手动安装 sqlite3 包

    我正在使用 Electron 和 Sequelize 构建一个应用程序 我开始配置数据库 然后 我收到此错误 未捕获的错误 请手动安装 sqlite3 包 在新的 ConnectionManager home matheusdrdj Doc
  • 快速递增 Int!不工作

    我理解选项是如何工作的 但这让我陷入了困境 我有一个变量叫做num我想增加它 所以我做了以下操作 var num Int 0 num ERROR Unary operator cannot be applied to an operand
  • 如何在 Playground 中运行异步回调

    许多 Cocoa 和 CocoaTouch 方法都具有在 Objective C 中作为块实现的完成回调以及在 Swift 中作为闭包实现的回调 然而 当在 Playground 中尝试这些时 永远不会调用完成 例如 Playground