マクロの役割:フリースタンディングとアタッチド
#expressionマクロと、@attachedのpeer/member/accessorマクロの役割を理解します。
「マクロの役割:フリースタンディングとアタッチド」は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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- マクロの役割:フリースタンディングとアタッチド
- フリースタンディング式マクロの記述
- ボイラープレートを削減するアタッチドメンバーマクロ
- マクロのテストとデバッグ