在Swift中有标签出现延迟

时间:2014-07-13 01:51:34

标签: swift

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

有没有办法让我用来执行两个函数的dispatch_after序列,我的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()
}) 

2 个答案:

答案 0 :(得分:1)

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

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 :(得分:0)

是。你可以在闭包内有多个语句({}中的所有内容。

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

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

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

作为旁注:您是否有理由使用dispatch_get_current_queue代替dispatch_get_main_queue?前者已弃用,似乎已在测试版3中删除。