Роли макросов: автономные и присоединённые
Разберитесь в макросах #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 — локальная установка не требуется.
Все уроки этого курса
- Роли макросов: автономные и присоединённые
- Написание автономного макроса-выражения
- Присоединённые макросы членов для сокращения шаблонного кода
- Тестирование и отладка макросов