首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让标签在Swift中延迟显示

让标签在Swift中延迟显示
EN

Stack Overflow用户
提问于 2014-07-13 09:51:34
回答 2查看 1.7K关注 0票数 1

我想推迟我的井字游戏。这是为了让它看起来像是AI在思考。在我的标签thinkingLabel上,我希望在延迟期间显示以下字符串"Thinking…"。在延迟之后( AI已经采取了行动),标签应该会消失。

有没有办法让我用来执行两个函数的dispatch_after序列在延迟后执行我的AI turn和标签更改?有没有更好的方法?

下面是我用来延迟的代码:

代码语言:javascript
复制
checkforWin()
let delay = 1 * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_current_queue(), {
    self.aiTurn()
}) 
EN

回答 2

Stack Overflow用户

发布于 2014-07-13 10:01:22

是的,当然。传递给dispatch_after的块可以有任意数量的行:

代码语言:javascript
复制
checkforWin()
let delay = 1 * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))

dispatch_after(time, dispatch_get_current_queue(), {
  self.aiTurn()
  // more lines here
}) 

但是,如果您要更新块中的UI,请记住所有Cocoa UI更新都必须发生在主线程上。您最安全的选择是使用dispatch_get_main_queue而不是dispatch_get_current_queue

票数 1
EN

Stack Overflow用户

发布于 2014-07-13 10:01:03

是。您可以在闭包中包含多个语句({}中的所有语句)。

代码语言:javascript
复制
dispatch_after(time, dispatch_get_current_queue(), {
self.aiTurn()
println("another statement")
self.anotherMethod()
}) 

整个闭包将在延迟后执行。如果您在闭包中有一堆语句,如果您使用尾随闭包语法,它可能会看起来更干净。

代码语言:javascript
复制
dispatch_after(time, dispatch_get_current_queue()){
    self.aiTurn()
    println("another statement")
    self.anotherMethod()
}

附注:您是否有任何理由使用dispatch_get_current_queue而不是dispatch_get_main_queue?前者已被弃用,似乎已在beta 3中删除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24718883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档