TGViewer
Библиотека мобильного разработчика | Android, iOS, Swift, Retrofit, Moshi, Chuck Библиотека мобильного разработчика | Android, iOS, Swift, Retrofit, Moshi, Chuck @mobileproglib · 9.17K subscribers
Post #7088 618
Сабскрипты в Swift

Классы, структуры и перечисления могут определять сабскрипты (subscripts). Сабскрипты используются для доступа к элементам коллекции или последовательности. В ряде языков программирования есть похожая концепция - индексаторы. Сабскрипты позволяют обращаться с объектом класса или структуры как с отдельной коллекцией.

Для определения сабскрипта используется ключевое слово subscript:

subscript(параметры) -> тип_возвращаемых_объектов {
     
    get {
         
        // возвращаем значение
    }
    set(newValue) {
         
        // устанавливаем новое значение newValue
    }
}


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

Сабскрипт может состоять из двух блоков: get и set. Блок get возвращает элемент, а блок set устанавливает новое значение, которое передается через параметр newValue.

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

class Book{     // класс книги
     
    var name: String
    init(name: String){
         
        self.name = name
    }
}
class Library{      // класс библиотеки
     
    var books: [Book] = [Book]()
     
    init(){
         
        books.append(Book(name: "Война и мир"))
        books.append(Book(name: "Отцы и дети"))
        books.append(Book(name: "Чайка"))
    }
     
    subscript(index: Int) -> Book{
         
        get{
            return books[index]
        }
        set(newValue){
            books[index] = newValue
        }
    }
}
 
var myLibrary: Library = Library()
var firstBook: Book = myLibrary[0]  // получаем элемент по индексу 0
print(firstBook.name)   // Война и мир
 
myLibrary[2] = Book(name: "Мартин Иден")    // установка элемента по индексу 2
print(myLibrary[2].name)    // Мартин Иден


Здесь сабскрипт предназначен для работы с типом Book. В блоке get происходит получение объекта Book по индексу из массива books. В блоке set устанавливаем объект Book в массиве books.

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

var firstBook: Book = myLibrary[0]


Есть два типа сабскриптов:

🔵 Сабскрипты, которые поддерживают чтение и запись (то есть с блоками get и set, как в примере выше)
🔵 Сабскрипты только для чтения (только с блоком get)

Изменим класс библиотеки, чтобы применить сабскрипт только для чтения:

class Library{
     
    var books: [Book] = [Book]()
     
    init(){
         
        books.append(Book(name: "Война и мир"))
        books.append(Book(name: "Отцы и дети"))
        books.append(Book(name: "Чайка"))
    }
     
    subscript(index: Int) -> Book{
         
        return books[index]
    }
}


📌 Лучшие вакансии для мобильных разработчиков

🐸 Библиотека мобильного разработчика

#буст #JuniorKit #Swift
More from @mobileproglib
  1. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  2. Sep 15, 2026🖥 Наглядная шпаргалка по операторам Combine Внутри: описанием распространенных операторов…
  3. Sep 13, 2026🌸 Вселенная намекает: пора уже начать этот курс С 14 сентября цены в Proglib Academy выра…
  4. Sep 13, 2026🤪 Если бы можно было задать один вопрос про AI в разработке — что бы вы спросили? Как выб…
  5. Sep 9, 2026🤳 Как работает мобильная разработка с AI под капотом — интенсивы от Podlodka Crew Конфере…
  6. Aug 8, 2026⚙️ Kinetics — настраиваемые примитивы физического движения для SwiftUI Kinetics привносит…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →