Cierre como propiedad para subclass UITableViewCell para actualizar valor: ¿es una mala idea?

Me gustaría algunas opiniones sobre una idea que acabo de tener:

Tengo un montón de subclass UITableViewCell . En mi caso particular, es solo para agregar un UISwitch y tener una propiedad para acceder a él.

Configurar el valor del interruptor es sencillo. La actualización del Bool asociado a este conmutador no es tanto.

Pensé en agregar un cierre como una propiedad de mi celda para poder llamarlo para actualizar mi bool en mi subclass UITableViewController

Aquí hay un código que pensé:

 class SwitchTableViewCell:UITableViewCell { @IBOutlet var theSwitch:UISwitch! var switchValueChangedBlock:((Bool) -> Void)? override func awakeFromNib() { theSwitch.addTarget(self, action: "switchValueChanged", forControlEvents: .ValueChanged) } deinit { theSwitch.removeTarget(self, action: nil, forControlEvents: .AllEvents) } func setCallback(callback:(Bool) -> Void) { switchValueChangedBlock = callback } func switchValueChanged() { switchValueChangedBlock?(theSwitch.on) } } 

 class myTableViewController:UITableViewController { var alarmEnabled:Bool = true ... func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var cell:UITableViewCell? if indexPath.section == enableSection { cell = tableView.dequeueReusableCellWithIdentifier(enableAlarmCellIdentifier,forIndexPath: indexPath) let myCell = cell as! SwitchTableViewCell myCell.theSwitch.on = alarmEnabled myCell.setCallback({[unowned self] (boolValue:Bool) in self.alarmEnabled = boolValue }) } } ... } 

Como ventajas veo lo siguiente:

  • No hay necesidad de delegado
  • No se ha llamado ningún método donde necesito determinar qué valor debo actualizar (tengo varias instancias de mi celda para diferentes variables)

No puedo comprender los posibles inconvenientes que mi idea podría tener y si, en general, es una mala o una buena idea.

Solutions Collecting From Web of "Cierre como propiedad para subclass UITableViewCell para actualizar valor: ¿es una mala idea?"

Personalmente, soy un poco vieja escuela y simplemente prefiero el patrón de delegación sobre los cierres.

Pero para su pregunta … lo que sugiere es exactamente para qué están hechos los cierres. Solo házlo.

Simplemente entrega al object de otra class un trozo de código (o la reference al punto de input de alguna subrutina, respectivamente) que quieres que se ejecute cuando ocurra algún evento. Para eso está hecho y eso es lo que estás haciendo.