Учебники

Swift — Подписки

Доступ к элементам-членам коллекции, последовательности и списка в классах, структурах и перечислениях осуществляется с помощью индексов. Эти индексы используются для хранения и извлечения значений с помощью индекса. Доступ к элементам массива осуществляется с помощью someArray [index], а к его последующим элементам-членам в экземпляре Dictionary можно обращаться как someDicitonary [key].

Для одного типа подписки могут варьироваться от одного до нескольких объявлений. Мы можем использовать соответствующий индекс, чтобы перегрузить тип значения индекса, передаваемого в индекс. Индексы также варьируются от одного измерения до нескольких измерений в соответствии с требованиями пользователей для их объявлений типов входных данных.

Синтаксис объявления нижнего индекса и его использование

Давайте вспомним вычисленные свойства. Индексы также следуют тому же синтаксису, что и синтаксис вычисляемых свойств. При запросе экземпляров типов индексы пишутся в квадратных скобках, за которыми следует имя экземпляра. Синтаксис нижнего индекса соответствует той же структуре синтаксиса, что и синтаксис «метод экземпляра» и «вычисляемое свойство». Ключевое слово «subscript» используется для определения подписок, и пользователь может указать один или несколько параметров с их типами возвращаемых данных. У нижних индексов могут быть свойства для чтения и записи или только для чтения, а экземпляры хранятся и извлекаются с помощью свойств «getter» и «setter», как у вычисляемых свойств.

Синтаксис

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

Example1

Live Demo

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

Когда мы запускаем вышеуказанную программу, используя площадку, мы получаем следующий результат —

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

Example2

Live Demo

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

Когда мы запускаем вышеуказанную программу, используя площадку, мы получаем следующий результат —

Sunday
Monday
Tuesday
Wednesday

Параметры в нижнем индексе

Подстрочный индекс принимает от одного до нескольких входных параметров, и эти входные параметры также относятся к любому типу данных. Они также могут использовать переменные и переменные параметры. Подстрочные индексы не могут предоставлять значения параметров по умолчанию или использовать какие-либо параметры ввода-вывода.

Определение нескольких нижних индексов называется «перегрузкой нижних индексов», когда класс или структура могут предоставлять несколько определений нижних индексов по мере необходимости. Эти множественные индексы выводятся на основе типов значений, объявленных в фигурных скобках.

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

Когда мы запускаем вышеуказанную программу, используя площадку, мы получаем следующий результат —

1.0

Индекс Swift 4 поддерживает один параметр для нескольких объявлений параметров для соответствующих типов данных. Программа объявляет структуру Matrix как матрицу 2 * 2-мерного массива для хранения типов данных Double. Параметр Matrix вводится с типами данных Integer для объявления строк и столбцов.

Новый экземпляр для матрицы создается путем передачи числа строк и столбцов в инициализацию, как показано ниже.

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

Значения матрицы могут быть определены путем передачи значений строки и столбца в индекс, разделенных запятой, как показано ниже.