在Swift中延迟显示标签

在Swift中延迟显示标签,swift,Swift,我想推迟我的井字游戏。这是为了让它看起来像是人工智能在思考。在我的标签上,thinkingLabel,我想在延迟期间显示以下字符串“Thinking…”。延迟后(AI已经移动),标签应该消失 延迟后,我用来执行两个功能的dispatch\u序列有什么方法吗,我的AI回合和标签更改?有更好的方法吗 以下是我用于延迟的代码: checkforWin() let delay = 1 * Double(NSEC_PER_SEC) let time = dispatch_time(DISPATCH_TIM

我想推迟我的井字游戏。这是为了让它看起来像是人工智能在思考。在我的标签上,
thinkingLabel
,我想在延迟期间显示以下字符串
“Thinking…”
。延迟后(AI已经移动),标签应该消失

延迟后,我用来执行两个功能的
dispatch\u
序列有什么方法吗,我的AI回合和标签更改?有更好的方法吗

以下是我用于延迟的代码:

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()
}) 

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

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

dispatch_after(time, dispatch_get_current_queue()){
    self.aiTurn()
    println("another statement")
    self.anotherMethod()
}

作为旁注:您是否有任何理由使用
dispatch\u get\u current\u queue
而不是
dispatch\u get\u main\u queue
?前者已被弃用,似乎已在beta 3中删除。

当然可以。在之后传递给
dispatch\u的块可以有任意数量的行:

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\u get\u main\u queue
而不是
dispatch\u get\u current\u queue

好的,谢谢。我换成了调度队列。它工作了,只是我仍然有一个问题-信息在移动后打印到标签上,我需要它只在延迟发生时出现,并在AI移动后消失,以便计算机“思考”。有什么想法吗?让您的标签出现在
dispatch\u after
之前,并在
self.aiTurn()之后的行中消失。
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
})