忽略完成处理程序Swift

时间:2018-03-25 10:24:18

标签: swift closures

我有这个功能:

func getEvents(completion:@escaping (Bool) -> ()) {
        //here I do some async stuff 
        completion(asyncstuffresult)
    }

在某些情况下,我想等待这个函数的结果,所以我称之为

 getEvents { (success) in
            //whatever
        }

然而,有时候我想要解雇这个功能,而不是真正关心它是如何,或者特别是何时执行。

在这种情况下,我宁愿这样称呼它

getEvents()

为了清洁

是否有允许我这样做的语法?

2 个答案:

答案 0 :(得分:0)

1。您可以将func更改为

func getEvents(completion: @escaping ((Bool) -> Void)? = nil)

正如Apple所做的那样

func dismiss(animated flag: Bool, completion: (() -> Void)? = nil)

2。另一种方法是将“empty”处理程序设置为closure的默认值:

func getEvents(completion: @escaping ((Bool) -> Void) = { _ in })

所有情况都允许您在没有闭包参数的情况下将func调用为getEvents()

答案 1 :(得分:0)

completion更改为可选项,如下所示:

func getEvents(completion:@escaping ((Bool) -> Void)? = nil) {
    //here I do some async stuff 
    completion?(asyncstuffresult)
}

请注意上面?中的可选completion?(asyncstuffresult),只有在给定时才执行completion。并且您将能够实现所需的用法(不必必须必须通过completion处理程序)

getEvents()