setter calculado para un subíndice de una matriz en Swift [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Declaración de establecimiento de taquigrafía para un subíndice de una matriz en Swift 2 respuestas

Para abreviar, lo que quiero lograr es, por ejemplo:

var actions: [String]{
    get{
        if (_actions==nil){
            _actions = []
        }
        return _actions!
    }
    set{
        _actions = newValue
    }
    subscript(index:Int) -> String{
      set {
         assert(index<_actions.count && index>=0, "Index out of range")
         _actions[index] = newValue
      }
    }
}

Sé que el subíndice no es un descriptor de acceso para la matriz, pero ¿cuál es la alternativa más conveniente para hacer eso?

¡Realmente aprecio las respuestas breves si es posible! ¡Muchas gracias!

Editar:

Para extender mi explicación para @jrturton,

Lo que estoy tratando de lograr es que cada vez que las acciones [i] se establecen en un nuevo Valor, me gustaría hacer algunos cálculos adicionales, como reposicionar la subvista respectiva de las acciones [i].

Pero si digoactions[3] = "randomMethod", se llamará al configurador calculado para toda la matriz. ¿Derecho? Así que me gustaría encontrar una manera para que cuandoactions[3] se establece en un nuevoValor, una funciónrepositionView(3) puede ser llamado, por ejemplo.

Conozco otras formas de hacerlo, pero mi pregunta simplemente pregunta si hay una forma más convincente, como el ejemplo anterior: un setter computarizado, ¿para hacer lo que quiero?

Edición 2:

Para mostrar a @Vatsal Manot lo que realmente quiero decir, eliminé getter para el subíndice, y aquí hay un ejemplo completo.swift (que no se ejecutará debido a un error):

import UIKit
import Foundation

class DWActionsSubmenu: UIView{
    var actions: [DWAction]{
        get{
            if (_actions==nil){
                _actions = []
            }
            return _actions!
        }
        set{
            _actions = newValue
        }
        subscript(index:Int) -> DWAction{
            set {
                assert(index<_actions.count && index>=0, "Index out of range")
                _actions[index] = newValue
                a()
            }
        }
    }

    var _actions: [DWAction]?

    init(actions:[DWAction]?){
        super.init()
        _actions = actions
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder:aDecoder)
    }

    func a(){

    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta