記事


マクロの適用


マクロを使用して、コンパイル時に繰り返しコードを生成します。





概観


Swift マクロは、コンパイル時にソースコードの一部を生成することで、Swift で繰り返しコードを記述する手間を省きます。マクロの呼び出しは常に追加的な処理です。つまり、マクロは記述済みのコードに新しいコードを追加しますが、あなたのプロジェクトに既に存在するコードを変更したり削除したりすることはありません。


Swift 標準ライブラリや多くのフレームワークなど、多くのライブラリがマクロを提供しています。独自のマクロを記述することもできます。


マクロは Swift コードを生成するため、コードでマクロを使用しているかどうかに関係なく、開発とデバッグに同じツールを使用できます。



マクロの呼び出し


マクロを呼び出すために使用する構文は、マクロを宣言に添付するかどうかに応じて若干異なります。


マクロを宣言に添付するには、マクロ名の前にアットマーク(@)を付け、マクロ引数はマクロ名の後に記述します。この構文は属性の記述と同じです。例えば、


  1. @Observable
  2. public final class MyObject {
  3. public var someProperty: String = ""
  4. public var someOtherProperty: Int = 0
  5. fileprivate var somePrivateProperty: Int = 1
  6. }

宣言に添付されたマクロはコードを生成し、そのコードを宣言に追加します。例えば、上記のコードにある Observable() マクロは、MyObject クラスに追加のメンバーを追加して Observable プロトコルを実装し、MyObjectObservable に準拠していることをマークします。


マクロを宣言に添付せずに呼び出すには、マクロ名の前にシャープ記号 (#) を付け、マクロ引数はマクロ名の後に記述します。この構文は、#if やその他のコンパイル時処理と同じです。例えば、以下のようになります。


  1. let messagePredicate = #Predicate<Message> { message in
  2. message.recipient == "John Appleseed"
  3. }

宣言に添付されていないマクロはコードを生成し、そのマクロを呼び出した場所にそのコードを追加します。例えば、上記のコードの Predicate マクロは、Predicate 構造体のインスタンスを作成します。


詳細については、Swiftプログラミング言語マクロ を参照してください。



展開されたマクロを検査する


あなたのプロジェクトをビルドすると、Swift はあなたのコードを読み取り、マクロを呼び出している箇所を見つけます。次に、Swift は各マクロの実装を呼び出してコードを展開します。最後に、Swift は生成されたコードを含め、通常どおりプロジェクトをビルドします。


マクロが生成したコードを表示するには、Xcode でマクロを呼び出す箇所のコードをクリックし、"Editor(エディタ)" > "Expand Macro(マクロを展開)" を選択します。展開されたコードを読むことで、マクロの動作の詳細を理解するのに役立ちます。また、展開されたコードは、マクロを使用するコードのデバッグにも役立ちます。例えば、マクロによって生成されたコード内にブレークポイントを設定できます。














トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ