Swift中的完成处理程序问题

Swift中的完成处理程序问题,swift,closures,completionhandler,Swift,Closures,Completionhandler,我必须一次显示一个多个视图组件,只有在显示一个组件时,我才想显示第二个组件,以此类推。某些组件中有动画。所以我有以下代码: func addFirstElement(completion: (_ success: Bool) -> Void) { //code to add view element completion(true) } addFirstElement {(success) -> Void in

我必须一次显示一个多个视图组件,只有在显示一个组件时,我才想显示第二个组件,以此类推。某些组件中有动画。所以我有以下代码:

    func addFirstElement(completion: (_ success: Bool) -> Void) {
        //code to add view element 
        completion(true)
    }

addFirstElement {(success) -> Void in
            if success {
                addSecondElement {(success) -> Void in
                    if success {
                        addThirdElement {(success) -> Void in
                            if success {
                                addForthElement {(success) -> Void in
                                    if success {
                                        addFifthElement()
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
问题是我看到所有元素一次显示,而不是一次显示一个。
我对闭包只有部分了解,所以我不确定我的代码是否正确。

除非在创建每个组件时有一些长时间的操作,否则它们当然会同时出现

如果希望看到它们按顺序出现,请在每个控制器创建过程中引入一个需要一些时间的操作

如果希望在上一个动画完成时显示下一个控制器,则需要使用动画的完成处理程序

UIView.animateWithDuration(animationDuration, animations: {
    // animation
    }, completion: {(finished:Bool) in
        // load up the next view
})

在每次
之前使用计时器延迟如果成功
添加的速度太快,以至于您认为它是一次完成的,那么它就是快速的谢谢您的响应,似乎动画就是问题所在。其中我有注释“//代码来添加视图元素”,有一些元素类型的动画。因此,如果第一个元素有动画,而第二个元素没有,我希望第二个元素在第一个元素动画完成后出现。看起来我必须使用动画的完成处理程序。