Swift - Subíndices

El acceso a los elementos miembros de una colección, secuencia y lista en Clases, Estructuras y Enumeraciones se realiza con la ayuda de subíndices. Estos subíndices se utilizan para almacenar y recuperar los valores con la ayuda de index. Se accede a los elementos de matriz con la ayuda de someArray [índice] y se puede acceder a sus elementos miembros subsiguientes en una instancia de Dictionary como someDicitonary [clave].

Para un solo tipo, los subíndices pueden variar de declaraciones simples a múltiples. Podemos usar el subíndice apropiado para sobrecargar el tipo de valor de índice pasado al subíndice. Los subíndices también varían de una dimensión a una dimensión múltiple según los requisitos de los usuarios para sus declaraciones de tipo de datos de entrada.

Sintaxis de declaración de subíndice y su uso

Repasemos las propiedades calculadas. Los subíndices también siguen la misma sintaxis que la de las propiedades calculadas. Para consultar instancias de tipo, los subíndices se escriben dentro de un corchete seguido del nombre de la instancia. La sintaxis de subíndice sigue la misma estructura de sintaxis que la del 'método de instancia' y la sintaxis de 'propiedad calculada'. La palabra clave 'subíndice' se utiliza para definir subíndices y el usuario puede especificar uno o varios parámetros con sus tipos de retorno. Los subíndices pueden tener propiedades de lectura-escritura o de solo lectura y las instancias se almacenan y recuperan con la ayuda de las propiedades 'getter' y 'setter' como las propiedades calculadas.

Sintaxis

subscript(index: Int) −> Int {
   get {
      // used for subscript value declarations
   }
   set(newValue) {
      // definitions are written here
   }
}

Ejemplo 1

struct subexample {
   let decrementer: Int
   subscript(index: Int) -> Int {
      return decrementer / index
   }
}
let division = subexample(decrementer: 100)

print("The number is divisible by \(division[9]) times")
print("The number is divisible by \(division[2]) times")
print("The number is divisible by \(division[3]) times")
print("The number is divisible by \(division[5]) times")
print("The number is divisible by \(division[7]) times")

Cuando ejecutamos el programa anterior usando el patio de recreo, obtenemos el siguiente resultado:

The number is divisible by 11 times
The number is divisible by 50 times
The number is divisible by 33 times
The number is divisible by 20 times
The number is divisible by 14 times

Ejemplo 2

class daysofaweek {
   private var days = ["Sunday", "Monday", "Tuesday", "Wednesday",
      "Thursday", "Friday", "saturday"]
   subscript(index: Int) -> String {
      get {
         return days[index]
      }
      set(newValue) {
         self.days[index] = newValue
      }
   }
}
var p = daysofaweek()

print(p[0])
print(p[1])
print(p[2])
print(p[3])

Cuando ejecutamos el programa anterior usando el patio de recreo, obtenemos el siguiente resultado:

Sunday
Monday
Tuesday
Wednesday

Opciones en subíndice

Los subíndices toman de uno a varios parámetros de entrada y estos parámetros de entrada también pertenecen a cualquier tipo de datos. También pueden utilizar parámetros variables y variadic. Los subíndices no pueden proporcionar valores de parámetros predeterminados ni utilizar parámetros de entrada y salida.

La definición de varios subíndices se denomina "sobrecarga de subíndices", donde una clase o estructura puede proporcionar múltiples definiciones de subíndices según sea necesario. Estos múltiples subíndices se infieren en función de los tipos de valores que se declaran entre las llaves del subíndice.

struct Matrix {
   let rows: Int, columns: Int
   var print: [Double]
   init(rows: Int, columns: Int) {
      self.rows = rows
      self.columns = columns
      print = Array(count: rows * columns, repeatedValue: 0.0)
   }
   subscript(row: Int, column: Int) -> Double {
      get {
         return print[(row * columns) + column]
      }
      set {
         print[(row * columns) + column] = newValue
      }
   }
}
var mat = Matrix(rows: 3, columns: 3)

mat[0,0] = 1.0
mat[0,1] = 2.0
mat[1,0] = 3.0
mat[1,1] = 5.0

print("\(mat[0,0])")

Cuando ejecutamos el programa anterior usando el patio de recreo, obtenemos el siguiente resultado:

1.0

El subíndice Swift 4 admite declaraciones de un solo parámetro a múltiples parámetros para los tipos de datos apropiados. El programa declara la estructura 'Matrix' como una matriz de matriz de 2 * 2 dimensiones para almacenar tipos de datos 'Double'. El parámetro Matrix se ingresa con tipos de datos Integer para declarar filas y columnas.

Se crea una nueva instancia de Matrix pasando el recuento de filas y columnas a la inicialización como se muestra a continuación.

var mat = Matrix(rows: 3, columns: 3)

Los valores de la matriz se pueden definir pasando los valores de fila y columna al subíndice, separados por una coma, como se muestra a continuación.

mat[0,0] = 1.0  
mat[0,1] = 2.0
mat[1,0] = 3.0
mat[1,1] = 5.0