0Pricing
Swift Academy · Урок

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

Определяйте сабскрипты с помощью get / set , принимайте несколько параметров (например, для двумерной матрицы) и используйте пользовательские типы индексов (перечисления) для понятных API.

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

Что такое сабскрипты?

Сабскрипты позволяют обращаться к экземплярам по индексу, как к массивам. Можно:

  • открывать доступ только для чтения или для чтения и записи;
  • принимать несколько параметров (например, строку и столбец);
  • использовать пользовательские индексы, например перечисления, для большей ясности.

Сабскрипт только для чтения

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

struct TimesTable {
    let multiplier: Int
    subscript(index: Int) -> Int { multiplier * index } // read-only
}
let t = TimesTable(multiplier: 3)
print(t[4]) // 12

Чтение и запись с get/set

Добавьте get/set для доступа на чтение и запись. Проверяйте индексы, чтобы избежать сбоев.

struct SafeArray<T> {
    private var storage: [T]
    init(_ xs: [T]) { self.storage = xs }
    subscript(i: Int) -> T? {
        get { (0..<storage.count).contains(i) ? storage[i] : nil }
        set {
            guard let v = newValue, (0..<storage.count).contains(i) else { return }
            storage[i] = v
        }
    }
}
var s = SafeArray([10,20,30])
print(s[1] ?? -1) // 20
s[1] = 99
print(s[1] ?? -1) // 99
s[5] = 7          // ignored (out of range)

Двумерная индексация

Сабскрипты могут принимать несколько параметров и использовать метки для ясности (например, row/col).

struct Matrix {
    let rows: Int, cols: Int
    private var grid: [Int]
    init(_ r: Int, _ c: Int, fill: Int = 0) {
        rows = r; cols = c; grid = Array(repeating: fill, count: r * c)
    }
    private func valid(_ r: Int, _ c: Int) -> Bool { r >= 0 && r < rows && c >= 0 && c < cols }
    subscript(row r: Int, col c: Int) -> Int {
        get { precondition(valid(r,c), "Index out of range"); return grid[r*cols + c] }
        set { precondition(valid(r,c), "Index out of range"); grid[r*cols + c] = newValue }
    }
}
var m = Matrix(2, 3)
m[row: 0, col: 1] = 5
print(m[row: 0, col: 1]) // 5

Пользовательский индекс (перечисление)

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

enum Day: Int, CaseIterable { case mon = 0, tue, wed, thu, fri, sat, sun }
struct Week {
    private var tasks = Array(repeating: "—", count: Day.allCases.count)
    subscript(day: Day) -> String {
        get { tasks[day.rawValue] }
        set { tasks[day.rawValue] = newValue }
    }
}
var w = Week()
w[.wed] = "Ship"
print(w[.wed])

Советы по проектированию

Советы:

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

Объявление для чтения и записи

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

Повторение

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Перегрузка операторов и группы приоритетов
  2. Сабскрипты и пользовательские индексы: повторение
  3. Выведение Hashable/Equatable/Comparable
← Назад к Swift Academy