我在Swift 1.2和Xcode中遇到了一个有趣的现象。我对语言和库内部工作的熟悉不足以理解为什么会发生这种情况。也许有人能解释。考虑以下代码块:
static func hideSpinner(spinnerViewParent: UIViewController) {
for thissubview in spinnerViewParent.view.subviews
{
if thissubview is SpinnerView {
UIView.animateWithDuration(0.25, animations: {(thissubview as! SpinnerView).alpha = 0.0}, completion: {completed in thissubview.removeFromSuperview();})
break; //if you break, it will subvert and hijack the completion closure
}
}
}
SpinnerView是UIView的一个简单子类,它在屏幕上抛出一个微调器,提醒用户应用程序正在“思考”。hideSpinner函数淡出SpinnerView,然后将其从父视图中移除。
问题是,如果您离开中断;在中,animateWithDuration调用的完成块将无法正确执行。
如果您注释掉break;,它将按预期工作。
为什么?破坏循环是否会以某种方式破坏和孤立闭包回调?为什么要去掉裂缝;让它按预期工作?
最佳答案
真奇怪。当你有一个break
时,动画到底做什么?把旋转镜留在里面,这是超级视野?
您是否尝试过将println()
放入完成块中以查看代码是否正在执行?
如果它是真正的行为不端,那么它可能是一个编译器错误。
编辑:
您是否尝试使用手动数组索引重写它,并用布尔done
标志做一个while循环?这将证实是break语句导致了问题。