Swift - indeksy

Dostęp do elementów składowych kolekcji, sekwencji i listy w klasach, strukturach i wyliczeniach odbywa się za pomocą indeksów dolnych. Te indeksy służą do przechowywania i pobierania wartości za pomocą indeksu. Dostęp do elementów tablicy uzyskuje się za pomocą someArray [index], a do kolejnych elementów składowych w instancji Dictionary można uzyskać dostęp jako someDicitonary [klucz].

W przypadku jednego typu indeksy dolne mogą obejmować od jednej do wielu deklaracji. Możemy użyć odpowiedniego indeksu do przeciążenia typu wartości indeksu przekazanej do indeksu. Indeksy dolne wahają się również od pojedynczego wymiaru do wielu wymiarów, zgodnie z wymaganiami użytkowników w zakresie deklaracji typu danych wejściowych.

Składnia deklaracji indeksu dolnego i jej użycie

Podsumujmy obliczone właściwości. Indeksy również mają taką samą składnię jak obliczone właściwości. W przypadku zapytań o instancje indeksy dolne są zapisywane w nawiasach kwadratowych, po których następuje nazwa instancji. Składnia indeksu ma taką samą strukturę jak „metoda instancji” i „właściwość obliczona”. Słowo kluczowe „subscript” jest używane do definiowania indeksów, a użytkownik może określić jeden lub wiele parametrów z ich typami zwracanymi. Indeksy mogą mieć właściwości tylko do odczytu lub tylko do odczytu, a instancje są przechowywane i pobierane za pomocą właściwości „getter” i „setter”, podobnie jak właściwości obliczone.

Składnia

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

Przykład 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")

Gdy uruchomimy powyższy program za pomocą placu zabaw, otrzymamy następujący wynik -

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

Przykład 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])

Gdy uruchomimy powyższy program za pomocą placu zabaw, otrzymamy następujący wynik -

Sunday
Monday
Tuesday
Wednesday

Opcje w indeksie dolnym

Indeksy dolne mają od jednego do wielu parametrów wejściowych, a te parametry wejściowe również należą do dowolnego typu danych. Mogą również używać zmiennych i zmiennych parametrów. Indeksy nie mogą podawać domyślnych wartości parametrów ani używać żadnych parametrów wejściowych i wyjściowych.

Definiowanie wielu indeksów dolnych nazywane jest „przeciążeniem indeksów dolnych”, w przypadku których klasa lub struktura może zapewnić wiele definicji indeksów dolnych zgodnie z wymaganiami. Te liczne indeksy dolne są wywnioskowane na podstawie typów wartości zadeklarowanych w nawiasach dolnych.

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])")

Gdy uruchomimy powyższy program za pomocą placu zabaw, otrzymamy następujący wynik -

1.0

Skrypt Swift 4 obsługuje jeden parametr do wielu deklaracji parametrów dla odpowiednich typów danych. Program deklaruje strukturę „Matrix” jako macierz tablicową 2 * 2 wymiarową do przechowywania typów danych „Double”. Parametr Matrix jest wprowadzany z typami danych Integer do deklarowania wierszy i kolumn.

Nowa instancja Matrix jest tworzona przez przekazanie liczby wierszy i kolumn do inicjalizacji, jak pokazano poniżej.

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

Wartości macierzy można zdefiniować, przekazując wartości wierszy i kolumn do indeksu dolnego, oddzielone przecinkiem, jak pokazano poniżej.

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