Aujourd’hui, j’ai décidé de débuter un petite série de tips sur le petit nouveau (c’est encore un enfant cela fait seulement 1 an qu’il est disponible en version publique pour le développement d’applications iOS), je veux bien sur parler de swift.
Alors pour commencer simplement, nous allons juste afficher une alert à l’utilisateur. Pour vous donner des tips, je considère que vous savez utiliser Xcode et créer un projet.
Créer une alert est très simple avec swift, n’importe quelle recherche google vous fournira le code suivant
let prompt = UIAlertController(title: "Alert", message: "à malibu", preferredStyle: UIAlertControllerStyle.Alert) prompt.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil)) presentViewController(prompt, animated: true, completion: nil)
Pour avoir un callback sur le click du bouton de l’alert il faut rajouter un handler (anonyme par exemple)
prompt.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: { action in // Ici l'utilisateur a cliqué (ou bien quitté l'application parce qu'il a pas d'autre choix pour sortir de l'alert haha) }))
Bon, jusqu’ici, rien de compliqué, mais ce code ne fonctionne pas, enfin si mais NON! Parce que si vous utilisez la version iOS 7, et bien UIAlertController n’existe pas ! Donc l’application crash a l’appel de cette méthode.
C’est plutôt drôle, beaucoup d’applications crash de temps en temps, mais la plupart des crashs ne sont pas dû à une utilisation de ressources extrême de l’appareil, mais plutôt a de petits bugs comme cela.
Pour faire simple 1 nil = 1 crash
Donc voici comment gérer le retrocompatibilité
// if "UIAlertController" exist if objc_getClass("UIAlertController") != nil { // On execute le code qui va bien }else { // On fait quoi ? }
Il ne nous reste plus qu’à faire fonctionner notre alert sous iOS 7
}else { let alert = UIAlertView() alert.title = "Alert" alert.message = "à malibu" alert.addButtonWithTitle("Ok") alert.show() }
Enfin pour finir parlons des fonctions anonymes ou « Block » en swift, la class UIAlertView ne possède pas de callback anonyme. Mais nous ne sommes pas les seuls à vouloir utiliser cette option.
Ajouter à votre projet les classes suivantes (https://github.com/ryanmaxwell/UIAlertView-Blocks), soit UIAlertView+Blocks.m et UIAlertView+Blocks.h.
Comme nous utilisons swift penser bien a importer le fichier UIAlertView+Blocks.h dans votre « briding-header.h », car il s’agit d’un fichier objective C.
Maintenant, nous pouvons utiliser l’attribut « tapBlock » d’UIAlertView
alert.addButtonWithTitle("Ok") alert.tapBlock = {value in // TAADAAAA } alert.show()
C’est fini, pensez bien à utiliser cette démarche en début de projet cela vous évitera plein de crash !
À la prochaine pour un autre tip.