Swift中的完成处理程序问题

时间:2017-04-05 05:40:24

标签: swift closures completionhandler

我一次只能显示一个视图组件,只有当显示一个时我想显示第二个视图组件,依此类推。某些组件中有动画。所以我的代码是:

    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()
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

问题是我看到所有元素一次显示,而不是一次显示。 我对闭包只是部分清楚,所以我不确定我的代码是否正确。

1 个答案:

答案 0 :(得分:0)

除非你在创建每个组件时有一些冗长的操作,否则它们看起来似乎都会立刻出现。

如果您希望看到它们按顺序出现,请引入一个操作,该操作需要一些时间进入每个控制器创建。

如果您想在上一个动画完成时显示下一个控制器,那么您需要使用动画的完成处理程序

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