当前位置: 首页 > 面试题库 >

dispatch_after-Swift中的GCD?

逄边浩
2023-03-14
问题内容

我看过苹果公司的iBook,找不到任何定义:

有人可以解释一下的结构dispatch_after吗?

dispatch_after(<#when: dispatch_time_t#>, <#queue: dispatch_queue_t?#>, <#block: dispatch_block_t?#>)

问题答案:

结构的更清晰概念:

dispatch_after(when: dispatch_time_t, queue: dispatch_queue_t, block: dispatch_block_t?)

dispatch_time_t是一个UInt64。在dispatch_queue_t被实际键入别名的NSObject,但你应该只使用自己熟悉的GCD方法来获取队列。该块是一个Swift闭包。具体来说,dispatch_block_t定义为() -> Void,等效于() -> ()

用法示例:

let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(1 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue()) {
    print("test")
}

编辑:

我建议使用@matt的非常好的delay功能

编辑2:

在Swift 3中,将有新的GCD包装器。看到这里:https :
//github.com/apple/swift-evolution/blob/master/proposals/0088-libdispatch-
for-swift3.md

原始示例将在Swift 3中编写如下:

let deadlineTime = DispatchTime.now() + .seconds(1)
DispatchQueue.main.asyncAfter(deadline: deadlineTime) {
    print("test")
}

请注意,您可以将deadlineTime声明写为,DispatchTime.now() + 1.0并获得相同的结果,因为+运算符被如下重写(与相似-):

  • func +(time: DispatchTime, seconds: Double) -> DispatchTime
  • func +(time: DispatchWalltime, interval: DispatchTimeInterval) -> DispatchWalltime

这意味着如果您不使用,DispatchTimeInterval enum而只写一个数字,则假定您使用的是秒。



 类似资料:
  • 问题内容: 在Swift 2中,我能够使用大型中央调度来延迟动作: 但是,自Swift 3起,似乎不再可以编译了。在现代Swift中编写此代码的首选方法是什么? 问题答案: 语法很简单: 请注意,上述添加为a的语法似乎是造成混乱的根源(特别是因为我们习惯于添加nsec)。之所以可以使用“ add seconds as ”语法,是因为a 和在幕后,有一个运算符将占用a 并将其增加很多秒: 但是,如果

  • 问题内容: 我在Swift 2.x(甚至1.x)项目中有很多代码,如下所示: 或类似这样的东西来延迟执行: 或Grand Central Dispatch API的所有其他各种用途… 既然我已经在Swift 3的Xcode 8(测试版)中打开了我的项目,就会遇到各种各样的错误。其中一些提供了修复我的代码的功能,但并非所有修复都可以产生有效的代码。我该怎么办? 问题答案: 从一开始,Swift就提供

  • 在Swift 2中,我能够使用延迟使用中央调度的操作: 但自Swift3以来,这似乎不再编译了。用现代Swift写这篇文章的首选方式是什么?

  • 问题内容: 我正在学习Swift,还有另一个问题。Swift中是否有常规的epression,如果有,我该如何使用它们? 在研究中,我发现了一些相互矛盾的信息。Apple Developer文档中 有提及RegEx的内容,但它与我见过的任何其他语言看起来都非常不同。如果这是解决方案,该如何使用? 另一方面,该网站建议RegEx在Swift中不存在。这样对吗? 如果有帮助,我尝试使用正则表达式从包含

  • 问题内容: 我正在尝试在Swift中创建字符串的HMAC SHA-1哈希,但是由于它似乎没有导入CommonCrypto框架,因此无法弄清楚如何与API进行交互。我尝试了各种不同形式的“ import CommonCrypto”并创建了一个桥接头文件,但没有一个起作用。 奇怪的是,如果我创建一个Objective-C类,那么我就可以与API交互而不会出现任何问题,因此这似乎是Swift特有的。 另

  • 问题内容: Swift当前是否支持宏,或者将来有计划添加支持吗?目前,我正在散布: 在我的代码中的各个地方。 问题答案: 在这种情况下,应为“宏”参数添加默认值。 Swift 2.2及更高版本 Swift 2.1及更低版本 这是和功能做。 除了其他答案中已经提到的条件编译之外,没有其他宏。