0Pricing
Swift Academy · Урок

Роли макросов: автономные и присоединённые

Разберитесь в макросах #expression и ролях присоединённых макросов @attached: peer, member и accessor.

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

Что такое макросы Swift

Макросы Swift раскрывают исходный код во время компиляции и автоматически создают шаблонный код без дополнительных затрат во время выполнения.

// Macros are invoked with # (freestanding) or @ (attached)
#warning("Fix this later")
@Observable class Counter { var count = 0 }

Автономные макросы-выражения

Автономные макросы-выражения начинаются с # и возвращают значение или выполняют побочный эффект.

// #stringify expands to a tuple of the value and its source string
let (val, src) = #stringify(1 + 2)
print(val, src) // 3, "1 + 2"

Автономные макросы-объявления

Автономные макросы-объявления создают новые объявления, например функции и переменные, в месте использования.

// #makePair emits two variables
#makePair("point", x: 1, y: 2)
// expands to: let pointX = 1; let pointY = 2

Присоединённые макросы членов

Присоединённые макросы @member добавляют новые хранимые или вычисляемые свойства, инициализаторы либо методы к типу, к которому они присоединены.

@AddID
struct User { var name: String }
// Expands to: var id = UUID()

Присоединённые макросы аксессоров

Присоединённые макросы @accessor создают реализации методов чтения и записи для хранимых свойств.

struct Point {
  @Clamped(0...100)
  var x: Int = 0
  // accessor macro generates get/set with clamping
}

Присоединённые макросы соседних объявлений

Макросы соседних объявлений добавляют объявления рядом с объявлением, к которому они присоединены.

class Service {
  @AddAsync
  func fetchSync(completion: @escaping (Data)->Void) { ... }
  // peer macro adds: func fetch() async -> Data
}

Присоединённые макросы соответствия протоколам

Макросы соответствия протоколам добавляют типу соответствия протоколам и необходимые реализации.

@EquatableByID
struct Product { var id: Int; var name: String }
// adds: extension Product: Equatable { ... }

Присоединённые макросы расширений

Макросы расширений создают целые блоки расширений для типа, что удобно для добавления сложных реализаций протоколов.

@CustomCodable
struct Config { var host: String; var port: Int }
// adds: extension Config: Codable { custom encode/decode }

Раскрытие макросов происходит во время компиляции

Все макросы раскрываются во время компиляции — дополнительных затрат во время выполнения нет, а раскрытый код виден в Xcode.

// Right-click macro usage in Xcode → "Expand Macro"
// to see the generated source code

Объявление макроса

Макросы объявляются в отдельной цели макроса с помощью атрибута @freestanding или @attached.

@freestanding(expression)
public macro stringify<T>(_ value: T) -> (T, String)
  = #externalMacro(module: "MyMacros", type: "StringifyMacro")

Сводка ролей макросов

Автономные: #expression, #declaration. Присоединённые: @member, @accessor, @peer, @conformance, @extension.

// Freestanding
let result = #stringify(40 + 2)
// Attached
@Observable class Model { var count = 0 }

Быстрая проверка

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

Итоги урока

Автономные макросы (#name) создают значения или объявления. Присоединённые макросы (@name) дополняют типы членами, аксессорами, соседними объявлениями, соответствиями протоколам или расширениями. Все макросы раскрываются во время компиляции.

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

Урок «Роли макросов: автономные и присоединённые» бесплатный?

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

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

Разберитесь в макросах #expression и ролях присоединённых макросов @attached: peer, member и accessor. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

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

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

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

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

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

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

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

  1. Роли макросов: автономные и присоединённые
  2. Написание автономного макроса-выражения
  3. Присоединённые макросы членов для сокращения шаблонного кода
  4. Тестирование и отладка макросов
← Назад к Swift Academy