Swift Academy · レッスン

マクロの役割:フリースタンディングとアタッチド

#expressionマクロと、@attachedのpeer/member/accessorマクロの役割を理解します。

レッスン 1/413 ステップ

「マクロの役割:フリースタンディングとアタッチド」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これは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マクロは、適用先の型に新しいstored/computedプロパティ、init、またはメソッドを追加します。

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

アタッチドアクセサーマクロ

アタッチド@accessorマクロは、storedプロパティのgetter/setter実装を生成します。

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 { ... }

アタッチド拡張マクロ

拡張マクロは型全体のextensionブロックを生成し、複雑なプロトコル実装の追加に役立ちます。

@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属性を使用して、別のmacroターゲットで宣言します。

@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 }

理解度チェック

装飾する型にプロパティやinitなどの新しいメンバーを追加するマクロの役割はどれでしょうか。

レッスンのまとめ

フリースタンディングマクロ(#name)は値または宣言を生成します。アタッチドマクロ(@name)は、メンバー、アクセサー、ピア、準拠、または拡張によって型を拡張します。すべての展開はコンパイル時に行われます。

無料で開始

AI チューターと学ぶ Swift — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
122
レッスン
409

よくある質問

「マクロの役割:フリースタンディングとアタッチド」レッスンは無料ですか?

はい。「マクロの役割:フリースタンディングとアタッチド」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「マクロの役割:フリースタンディングとアタッチド」で何を学びますか?

#expressionマクロと、@attachedのpeer/member/accessorマクロの役割を理解します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「マクロの役割:フリースタンディングとアタッチド」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. マクロの役割:フリースタンディングとアタッチド
  2. フリースタンディング式マクロの記述
  3. ボイラープレートを削減するアタッチドメンバーマクロ
  4. マクロのテストとデバッグ
← Swift Academyに戻る