Swift Academy · Урок

Сабскрипты для пользовательской индексации

Определяйте пользовательские сабскрипты для чтения и записи элементов через синтаксис, похожий на синтаксис массивов, добавляйте безопасные аксессоры, поддерживайте индексацию с несколькими параметрами и даже типовые (static) сабскрипты.

Урок 4 из 48 шагов

«Сабскрипты для пользовательской индексации» — бесплатный урок Swift Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Обзор

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

Индексатор для чтения и записи

Создайте индексатор с получением/установкой, чтобы предоставить доступ к внутреннему хранилищу с синтаксисом, похожим на синтаксис массивов.

struct Box {
    private var items: [String] = []
    init(_ values: [String]) { self.items = values }

    subscript(index: Int) -> String {
        get { items[index] }           // may trap if out of bounds (like Array)
        set { items[index] = newValue }
    }
}
var b = Box(["a","b","c"])
print(b[1])     // "b"
b[1] = "B"
print(b[1])     // "B"

Безопасный индексатор

Возвращайте необязательное значение, чтобы избежать сбоев при недопустимых индексах: это удобный безопасный индексатор.

extension Array {
    subscript(safe i: Int) -> Element? {
        return indices.contains(i) ? self[i] : nil
    }
}
let arr = [10,20]
print(arr[safe: 1] ?? -1)  // 20
print(arr[safe: 5] ?? -1)  // -1

Несколько параметров

Индексаторы могут принимать несколько параметров — это удобно для матриц или доступа по координатам.

struct Matrix {
    let rows: Int, cols: Int
    private var grid: [Int]
    init(rows: Int, cols: Int, fill: Int = 0) {
        self.rows = rows; self.cols = cols
        self.grid = Array(repeating: fill, count: rows*cols)
    }
    private func index(_ r: Int, _ c: Int) -> Int { r*cols + c }

    subscript(r: Int, c: Int) -> Int {
        get { grid[index(r,c)] }
        set { grid[index(r,c)] = newValue }
    }
}
var m = Matrix(rows: 2, cols: 3)
m[0, 2] = 7
print(m[0, 2])

Индексатор типа

Добавьте индексатор типа с помощью статического члена, чтобы индексировать сам тип, а не экземпляр.

struct Roman {
    static let map: [Int:String] = [1:"I", 5:"V", 10:"X"]
    static subscript(_ n: Int) -> String? {
        return map[n]
    }
}
print(Roman[5] ?? "?")   // "V"

Советы

Советы:

  • Для безопасного доступа предпочтительно возвращать необязательные значения.
  • Делайте индексаторы простыми; сложную логику следует размещать в методах.
  • Называйте параметры понятно, например [row:col:].

Назначение индексаторов

Быстрая проверка: что позволяют делать индексаторы?

Повторение

Повторение: создавайте индексаторы для чтения и записи, добавляйте безопасные обращения с необязательными значениями, поддерживайте индексацию с несколькими параметрами и даже определяйте индексаторы типа.

Можно начать бесплатно

Изучай Swift с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
122
Уроки
409

Часто задаваемые вопросы

Урок «Сабскрипты для пользовательской индексации» бесплатный?

Да — полный текст урока «Сабскрипты для пользовательской индексации» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Сабскрипты для пользовательской индексации»?

Определяйте пользовательские сабскрипты для чтения и записи элементов через синтаксис, похожий на синтаксис массивов, добавляйте безопасные аксессоры, поддерживайте индексацию с несколькими параметра… Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Сабскрипты для пользовательской индексации»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Свойства и сабскрипты
  2. lazy и наблюдатели свойств
  3. Вычисляемые свойства с get/set
  4. Сабскрипты для пользовательской индексации
← Назад к Swift Academy