Astuces en Swift

Aujourd’hui nous allons continuer la série de présentation d’astuce en swift dont le dernier en date se trouve ici. Ces nouvelles astuces nous viennent de l’article de Caleb Davenport qui partage avec nous les astuces qu’il utilise dans son travail de tous les jours dans ce billet de blog.

La sténographie des membres

La sténographie dans la vie de tout les jours permet de retranscrire du texte aussi rapidement que la parole. En programmation et plus spécifiquement en Swift cela permet d’écrire plus vite du code en omettant certaines écritures.

Vous pouvez accéder aux membres de n’importe quel type « connu » en omettant de d’écrire le type correspondant. On l’utilise généralement avec les enum mais cela fonctionne avec tous les objects.

// UIColor.whiteColor()
view.backgroundColor = .whiteColor()

// CGRect.zero
view.frame = .zero

// Vous pouvez aussi l'utiliser pour les initialisers
tableView = .init(frame: .zero, style: .Plain)

Les resources des frameworks

Quelques fois vous avez besoin de charger des resources provenant d’autres frameworks. L’astuce pour rendre ce travail plus simple est d’exposer une fonction public bundle() dans chacun d’entre eux :

private final class BundleHelper {}

public func bundle() -> NSBundle {
  return NSBundle(forClass: BundleHelper.self)
}

Ensuite depuis votre code ou un autre endroit il vous suffit d’appeler le cette méthode pour accéder au bundle : OtherFramework.bundle().

De la même manière vous pouvez aussi déclarer des aides pour charger des resources spécifique au sein de ces frameworks :

public func image(name name: String, compatibleWithTraitCollection traitCollection: UITraitCollection? = nil) -> UIImage? {
  return UIImage(named: name, inBundle: bundle(), compatibleWithTraitCollection: traitCollection)
}

public func nib(name name: String) -> UINib {
  return UINib(nibName: name, bundle: bundle())
}

Maintenant vous pouvez appeler OtherFramework.image(name: "avatar/placeholder/small") ou OtherFramework.nib(name: "UserTableViewCell") pour to récupérer une resource fournit par ce framework.

Grâce aux espaces de nom, vous pouvez déclarer les même fonctions (avec le même nom) dans plusieurs frameworks et les appeler individuellement sans problème.

Le type d’une closure

Quelques fois en Swift il est impossible d’inférer le type d’une closure. La plupart du temps cela est dû au fait qu’il n’arrive pas à trouver le type de retour car les types d’entrée sont souvent connus d’avance. Il est possible de laisser les types d’entrées vide et de fournir seulement explicitement le type de retour :

array.map { number -> String? in
  guard number > 0 else { return nil }

  return "\(number) Photos"
}

Zip

La librairie standard de Swift offre beaucoup de fonctions et méthodes pour travailler avec les structures basiques. Par example si vous avez un couple de séquence et que vous avez besoin de former une seule liste contenant ce couple, vous devriez utiliser la méthode zip des listes. Zip prends deux séquences (de même taille) et retournent une séquence de couple (tuple binaire) contenant le n-ième élément de chaque liste.

Avant :

let first  = [ 1, 2, 3 ]
let second = [ "One", "Two", "Three" ]

for (index, first) in enumerate(first) {
  let second = second[index]
  /* */
}

Après :

let first  = [ 1, 2, 3 ]
let second = [ "One", "Two", "Three" ]

for (first, second) in zip(first, second) {
  /* */
}
1 Etoile2 Etoiles3 Etoiles4 Etoiles5 Etoiles (1 votes, average: 5,00 out of 5)
Loading...

Aucun commentaire

Time limit is exhausted. Please reload CAPTCHA.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.