Manière élégante de passe vide fermetures en Swift
Dans Swift, je dois souvent passer un noop fermeture d'une méthode juste pour se conformer à la méthode de paramètres (arité). Dans le bon vieux temps de l'Obj C, on pourrait passer nil
pour un noop de rappel et être fait avec elle. Est-il plus rapide façon plus élégante de le faire dans Swift sans passer par un bloc vide comme ci-dessous?
UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: { (UIAlertAction) -> Void in }) //do nothing in callback
Exemple complet:
import UIKit
class UIAlertControllerFactory {
class func ok(title: String, message: String) -> UIAlertController {
var alertController = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
var okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: { (UIAlertAction) -> Void in
})
alertController.addAction(okAction)
return alertController
}
}
OriginalL'auteur dimroc | 2014-10-04
Vous devez vous connecter pour publier un commentaire.
De la manière générale, si vous ne pouvez pas passer
nil
:Vous pouvez également passer
nil
dans ce cas, parce que (comme d'iOS 9.0) le gestionnaire est uneOptional
:handler
est de type((UIAlertAction!) -> Void)!
, ce qui signifie qu'il est Implicitement Déballé en Option. C'est pourquoi vous pouvez passernil
pour ce paramètre. Il est documentée (voir ma réponse pour plus de détails).Un
!
suffixe signifie uneImplicitlyUnwrappedOptional
, Apple utilise principalement (Api) pour signifier qu'ils n'ont pas vérifié sinil
est légal ou pas. Dans iOS 9.0, ils ont changé le type de((UIAlertAction) -> Void)?
, ce qui signifie qu'ils ont vérifié quenil
est autorisé.OriginalL'auteur rob mayoff
Vous pouvez définir un noop pour être utilisé comme un défaut de fermeture qui ne fait rien: (Référence: https://realm.io/news/closures-api-design)
À utiliser:
UIAlertAction
cas dans la question est nullable, cependant). Vous pourriez également avoir besoin d'un peu d'autres variantes de l'Api qui ne prennent pas@convention(block)
fermetures.OriginalL'auteur Leslie Godwin
Selon Xcode documentation,
UIAlertAction
a unconvenience init
méthode avec la déclaration suivante:Comme vous pouvez le voir, le
handler
paramètre est un Implicitement Déballé en Option de type((UIAlertAction!) -> Void)!
. De sorte que vous pouvez passernil
. Par exemple, vous pouvez créer unUIAlertController
instance qui contient unUIAlertAction
avechandler: nil
:Par conséquent, vous n'avez pas besoin de créer un bloc vide pour
handler
.OriginalL'auteur Imanou Petit
et il suffit de laisser le dernier argument. Vous pouvez mettre ceci dans votre "usine".
OriginalL'auteur Mundi