¿IBOutlet es privado en sus aplicaciones de iOS?

imagen

¿Probablemente usó un Storyboard o XIB para diseñar interfaces? El diseño del código está bien, pero a veces es mucho más fácil entender cómo funciona uno de los componentes de la interfaz al verlo y no al leerlo. En esta publicación, quiero discutir la necesidad de usar el modificador privado para IBOutlet.

Es poco probable que los desarrolladores para quienes la encapsulación IBOutlet sea obvia se sorprendan, pero la encuesta al final del artículo puede ser interesante.

Suponga que va a crear un IBOutlet (un enlace a una Vista desde un Guión gráfico) para cualquiera de sus UILabel. Al arrastrar con el mouse, Xcode crea cuidadosamente algo como

@IBOutlet weak var myLabel: UILabel! 

Durante mucho tiempo consideré este diseño óptimo, hasta que mi colega me preguntó por qué su IBOutlet no es privado.

De hecho, ¿por qué debería dejar todos los IBOutlets accesibles desde el exterior?
Imagine un problema clásico: tenemos una celda en la que, por ejemplo, se muestra el contacto de alguien

 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 } } 

Al agregar private al IBOutlet familiar, podemos garantizar que los campos especificados de la celda no se establecerán desde otra clase. Esto puede ser especialmente útil durante el trabajo en equipo, cuando alguien, por descuido / falta de tiempo / estupidez (subrayado según sea necesario), intenta establecer los colores, el texto u otras propiedades de las etiquetas de celda directamente en el método tableView (_: cellForRowAt :) .

Imagine que una celda o un ViewController completo contiene muchos IBOutlets, que tienen un montón de configuraciones de visualización. ¿No es más fácil protegerse agregando privacidad que buscar por qué la apariencia del elemento cambió repentinamente o el Reconocimiento de gestos apareció en algún lugar que establece un comportamiento inesperado?

PD: si después de leer desea usar privado para IBOutlets, entonces, por simplicidad, puede obtener fragmentos para esto en Xcode.

La siguiente es una encuesta, si desea comentar sobre su opción de respuesta, bienvenido a comentar.

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


All Articles