Passing optional callback into Swift function
Update for Swift 3/4:
An optional is no longer a boolean expression, and the
deprecated func dismissModalViewControllerAnimated(animated: Bool)
is no longer available in Swift.
Simply declare the completion parameter as an optional closure, and pass it on to
func dismiss(animated flag: Bool, completion: (() -> Void)? = nil)
which takes an optional closure as well:
func dismiss(completion: (() -> Void)? = nil) {
self.dismiss(animated: true, completion: completion)
}
Old (Swift 1.x?) answer:
Declare the completion
parameter as (implicitly unwrapped) optional closure (() -> Void)!
:
func dismiss(completion: (() -> Void)!) {
if (completion) {
return self.dismissViewControllerAnimated(true, completion: completion)
}
self.dismissModalViewControllerAnimated(true)
}
But note that you can call
self.dismissViewControllerAnimated(true, completion: completion)
in any case, because the completion
parameter of that function is optional as well.
And
func dismissModalViewControllerAnimated(animated: Bool)
is actually marked as deprecated.
Just adding to Martin R's answer above..
The callback can be optional, instead of implicit parameter (with exclamation mark), use the optional operator.
func dismiss(completion: (() -> Void)?) {
if completion != nil {
return self.dismissViewControllerAnimated(true, completion: completion!)
}
self.dismissModalViewControllerAnimated(true)
}
It's better to add = nil
in the callback declaration, to avoid passing nil while calling it:
func dismiss(completion: (() -> Void)? = nil) {
if (completion) {
return self.dismissViewControllerAnimated(true, completion: completion)
}
self.dismissModalViewControllerAnimated(true) }
And you can call your function like this : dismiss()