我想延迟我的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()
})
答案 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中删除。