所以我有一个带有完成块的函数来处理动画和调用该函数的函数。在函数调用期间,似乎跳过了完成块,因为没有打印打印行。我已经尝试将要执行的代码放入主队列,但它没有产生任何结果。以下是我调用函数的方法:
runAnimations(past.count, currentIteration: 0, animationsArray: past, completion: {
finished in
var randomr = self.randomInRange(0,hi: 3)
println("sell")
past.append(randomr)
for i in past123{
if(past.count >= 10){
}
else{
// have tried with and without dispatch_async.. neither print little did I know
dispatch_async(dispatch_get_main_queue()) {
println("little did I know")
self.incrementGame(past)
}
}
}
})
我知道past.count if语句不是问题,因为卖家打印行也没有执行。函数调用中的断点只是显示它跳过但是我知道这是因为它在异步线程中。
以下是runAnimations函数的代码:
func runAnimations(numberToIterate:Int, currentIteration:Int, animationsArray : [Int], completion: ((Bool) -> Void)?) {
UIView.animateWithDuration(1, animations: {
if(animationsArray[currentIteration] == 0){
self.label.text="circle!"
//self.label.alpha = 0.0
}
else if(animationsArray[currentIteration] == 1){
self.label.text="square!"
//self.label.alpha = 0.0
}
else if(animationsArray[currentIteration] == 2){
self.label.text="triangle!"
//self.label.alpha = 0.0
}
else if(animationsArray[currentIteration] == 3){
self.label.text="star!"
//self.label.alpha = 0.0
}
}, completion: {
finished in
println("BRO")
if(currentIteration+1>=numberToIterate){
self.label.alpha = 1.0
println("ook")
}
else{
println("okies")
self.runAnimations(numberToIterate, currentIteration: currentIteration+1, animationsArray: animationsArray, completion: { finished in
})
//self.runAnimations(numberToIterate, currentIteration: currentIteration+1, animationsArray: animationsArray)
}
})
runAnimation中的打印正确执行。
答案 0 :(得分:1)
你实际上必须调用完成块,你还没有完成
completion(finished)
您定义的完成块可以看作是一个单独的方法,您需要调用它。在您的情况下,您已将块作为可选项保留,因此您必须按照标准(completion != nil
等)进行可选检查
这是一个非常快速的"在swift中完成块的指南,现在称为闭包。看看:here