Что такое атрибуты в Swift?

В Swift атрибуты (attributes) представляют собой специальные метаданные, которые можно применить к объявлениям кода (например, классам, структурам, функциям, переменным) для изменения их поведения или добавления дополнительной информации компилятору или другим инструментам. Атрибуты начинаются с символа “@” перед именем атрибута и могут быть использованы для различных целей.

Например, атрибуты могут использоваться для:

  1. Оптимизации кода: Некоторые атрибуты позволяют контролировать оптимизацию кода, такие как @inline для встраивания функций.
  2. Рефлексии: Атрибуты могут быть использованы для добавления информации о типах и членах, которая доступна через механизм рефлексии.
  3. Аннотации: Разработчики могут создавать свои собственные пользовательские атрибуты для аннотации кода с дополнительной информацией.

Пример применения атрибута в Swift:

class MyClass {
    // Атрибут встраивания функции
    @inline(__always) func inlineFunction() {
        // Код функции
    }

    // Атрибут для связи с Objective-C кодом
    @objc func objcFunction() {
        // Код функции
    }
}

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

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

  1. Оптимизация кода:
    • @inline(__always)
    • @inline(__transparent)
    • @optimize(speed)
    • @optimize(size)
  2. Аннотации для рефлексии:
    • @objcMembers
    • @NSCopying
    • @NSManaged
    • @UIApplicationMain
  3. Аннотации для Swift Package Manager:
    • @available
    • @available(*, unavailable)
    • @available(*, introduced:)
    • @available(*, deprecated:)
    • @available(*, obsoleted:)
    • @available(*, message:)
    • @available(swift, introduced:)
    • @available(swift, deprecated:)
    • @available(swift, obsoleted:)
  4. Аннотации для Objective-C и Cocoa:
    • @objc
    • @NSApplicationMain
    • @IBAction
    • @IBDesignable
    • @IBInspectable
    • @IBOutlet
    • @discardableResult
  5. Аннотации для тестирования:
    • @testable
  6. Другие атрибуты:
    • @warn_unqualified_access
    • @transparent
    • @main

Этот список не исчерпывающий, и в Swift могут появляться новые атрибуты с каждым обновлением языка и его стандартной библиотеки. Для более актуального списка атрибутов, рекомендуется обращаться к официальной документации Swift.

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/attributes/#app-top

Вот примеры использования атрибутов в Swift:

  1. Атрибут встраивания функции @inline(__always):
@inline(__always) func multiply(_ a: Int, _ b: Int) -> Int {
    return a * b
}

let result = multiply(5, 10)
// Встраивание функции позволяет компилятору оптимизировать вызов функции напрямую,
// что может улучшить производительность в некоторых случаях.

Атрибут @inline(__always) подсказывает компилятору всегда встраивать функцию, даже если он считает, что это необходимо для оптимизации производительности.

2. Атрибут для связи с Objective-C кодом @objc:

class MySwiftClass: NSObject {
    @objc func swiftFunction() {
        print("This is a Swift function.")
    }
}

let myObject = MySwiftClass()
myObject.swiftFunction()
// Swift функция с атрибутом @objc может быть вызвана из Objective-C кода или использоваться во взаимодействии с Objective-C фреймворками.

В этом примере мы объявляем класс MySwiftClass, который наследуется от NSObject, и функцию swiftFunction, помеченную атрибутом @objc. Это позволяет вызывать эту функцию из Objective-C кода или использовать ее во взаимодействии с Objective-C фреймворками.