Видеокурсы по изучению языка программирования Swift. Подробнее

Синтаксис сабскрипта

Если вы нашли опечатку в тексте, выделите ее и нажмите CTRL + ENTER.

Сабскрипты позволяют вам запрашивать экземпляры определенного типа, написав одно или несколько значений в квадратных скобках после имени экземпляра. Синтаксис сабскрипта аналогичный синтаксису методу экземпляра и вычисляемому свойству. Вы пишите определения сабскрипта с помощью ключевого слова subscript и указываете один или более входных параметров и возвращаемый тип, точно так же как и в методах экземпляра. В отличии от методов экземпляра, сабскрипты могут быть read-write или read-only. Такое поведение сообщается геттом и сеттером в точности так же как и в вычисляемых свойствах:

subscript(index: Int) -> Int {
    get {
        //возвращает надлежащее значение скрипта
    }
    set(newValue) {
        //проводит надлежащие установки 
    }
}

Тип newValue такой же как и у возвращаемого значения сабскрипта. Что же касается вычисляемых свойств, то вы можете не указывать параметр сеттера (newValue). Параметр по умолчанию называется newValue и предоставляется, если не было назначено другого.

Как и в случае с нередактируемыми (read-only) вычисляемыми свойствами, вы можете опустить слово get для нередактируемых (read-only) сабскриптов:

subscript(index: Int) -> Int {
   //возвращает надлежащее значение скрипта
}

Пример определения нередактируемого сабскрипта, который определяет структуру TimesTable показать таблицу умножения на n:

struct  TimesTable{
    let multiplier: Int
    subscript(index: Int) -> Int {
        return multiplier * index
    }
}
 
let threeTimesTable = TimesTable(multiplier: 3)
print("шесть умножить на три будет \(threeTimesTable[6])")
// Выведет "шесть умножить на три будет 18"

В этом примере новый экземпляр TimesTable создан для отображения таблицы умножения на три. Это определяется переданным ему значением 3 в инициализатор структуры как значение для параметра экземпляра multiplier.

Вы можете запросить экземпляр threeTimesTable с помощью сабскрипта, как уже сделано в примере выше threeTimesTable[6]. Он запрашивает шестую запись в таблице умножения на три, которая возвращает значение 18 или 6 умноженное на 3.

Заметка

Таблица умножения на n основана на фиксированном математическом правиле. Присваивание нового значения threeTimesTable[someIndex] не подходит для нашего варианта, значит сабскрипт TimesTable определен как неизменяемый сабскрипт.

 

Swift: 
4.0