function - obtener - Pasar devolución de llamada opcional a la función Swift
tags wordpress codex (3)
Es mejor agregar = nil
en la declaración de devolución de llamada, para evitar pasar nil al llamarlo:
func dismiss(completion: (() -> Void)? = nil) {
if (completion) {
return self.dismissViewControllerAnimated(true, completion: completion)
}
self.dismissModalViewControllerAnimated(true) }
Y puede llamar a su función de esta manera: dismiss()
Estoy aprendiendo Swift Lang, pero no puedo pasar el argumento de devolución de llamada opcional a la función:
func dismiss(completion: () -> Void) {
if (completion) {
return self.dismissViewControllerAnimated(true, completion: completion)
}
self.dismissModalViewControllerAnimated(true)
}
Esto me muestra un error: Type () -> Void does not conform to protocol ''LogicValue''
¿Alguna sugerencia?
Simplemente agregando la respuesta de Martin R arriba ..
La devolución de llamada puede ser opcional, en lugar de un parámetro implícito (con signo de exclamación), use el operador opcional.
func dismiss(completion: (() -> Void)?) {
if completion != nil {
return self.dismissViewControllerAnimated(true, completion: completion!)
}
self.dismissModalViewControllerAnimated(true)
}
Actualización para Swift 3/4:
Una opción ya no es una expresión booleana, y el func dismissModalViewControllerAnimated(animated: Bool)
ya no está disponible en Swift.
Simplemente declare el parámetro de finalización como un cierre opcional y páselo a
func dismiss(animated flag: Bool, completion: (() -> Void)? = nil)
que también tiene un cierre opcional:
func dismiss(completion: (() -> Void)? = nil) {
self.dismiss(animated: true, completion: completion)
}
Old (Swift 1.x?) Respuesta:
Declare el parámetro de completion
como ( opcionalmente desenvuelto) cierre opcional (() -> Void)!
:
func dismiss(completion: (() -> Void)!) {
if (completion) {
return self.dismissViewControllerAnimated(true, completion: completion)
}
self.dismissModalViewControllerAnimated(true)
}
Pero ten en cuenta que puedes llamar
self.dismissViewControllerAnimated(true, completion: completion)
en cualquier caso, porque el parámetro de completion
de esa función también es opcional. Y
func dismissModalViewControllerAnimated(animated: Bool)
en realidad está marcado como obsoleto.