IBOutlet est-il privé dans vos applications iOS?

image

Vous avez probablement utilisé un Storyboard ou un XIB pour mettre en page des interfaces? La mise en page du code est très bien, mais il est parfois beaucoup plus facile de comprendre comment l'un des composants de l'interface fonctionne en le voyant et en ne le lisant pas. Dans cet article, je veux discuter de la nécessité d'utiliser le modificateur privé pour IBOutlet.

Les développeurs pour lesquels l'encapsulation IBOutlet est évidente ne risquent pas d'être surpris, mais l'enquête à la fin de l'article peut être intéressante.

Imaginez que vous allez créer un IBOutlet (un lien vers une vue à partir d'un Storyboard) pour l'un de vos UILabel. Lorsque vous faites glisser avec la souris, Xcode crée soigneusement quelque chose comme

@IBOutlet weak var myLabel: UILabel! 

Pendant longtemps, j'ai considéré cette conception comme optimale, jusqu'à ce que mon collègue me demande pourquoi votre IBOutlet n'est pas privé?

En fait, pourquoi devrais-je laisser tous les IBOutlets accessibles de l'extérieur?
Imaginez un problème classique - nous avons une cellule dans laquelle, par exemple, le contact de quelqu'un est affiché

 import UIKit class ContactCell: UITableViewCell { @IBOutlet private weak var nameLabel: UILabel! @IBOutlet private weak var positionLabel: UILabel! override func awakeFromNib() { super.awakeFromNib() } func setupCell(withContact contact: Contact) { nameLabel.text = contact.name positionLabel.text = contact.position } } 

En ajoutant private à l'IBOutlet familier, nous pouvons garantir que les champs spécifiés de la cellule ne seront pas définis à partir d'une autre classe. Cela peut être particulièrement utile pendant le travail d'équipe, lorsque quelqu'un, par négligence / manque de temps / stupidité (soulignez si nécessaire), essaie de définir les couleurs, le texte ou d'autres propriétés des étiquettes de cellule directement dans la méthode tableView (_: cellForRowAt :) .

Imaginez qu'une cellule ou un ViewController entier contient de nombreux IBOutlets, qui ont une tonne de paramètres d'affichage. N'est-il pas plus facile de vous sécuriser en ajoutant privé que de chercher pourquoi l'apparence de l'élément a soudainement changé ou la reconnaissance des gestes est apparue d'un endroit qui définit un comportement inattendu?

PS: Si après la lecture, vous souhaitez utiliser private pour IBOutlets, pour plus de simplicité, vous pouvez obtenir un extrait de code dans Xcode.

Ce qui suit est un sondage, si vous souhaitez commenter votre option de réponse, bienvenue à commenter.

Source: https://habr.com/ru/post/fr424843/


All Articles