我想推迟我的井字游戏。这是为了让它看起来像是AI在思考。在我的标签thinkingLabel上,我希望在延迟期间显示以下字符串"Thinking…"。在延迟之后( AI已经采取了行动),标签应该会消失。
有没有办法让我用来执行两个函数的dispatch_after序列在延迟后执行我的AI turn和标签更改?有没有更好的方法?
下面是我用来延迟的代码:
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()
}) 发布于 2014-07-13 10:01:22
是的,当然。传递给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。
发布于 2014-07-13 10:01:03
是。您可以在闭包中包含多个语句({}中的所有语句)。
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?前者已被弃用,似乎已在beta 3中删除。
https://stackoverflow.com/questions/24718883
复制相似问题