บทบาทของมาโคร: แบบอิสระและแบบแนบ
ทำความเข้าใจมาโคร #expression และบทบาทของมาโคร @attached แบบ peer/member/accessor
บทบาทของมาโคร: แบบอิสระและแบบแนบ เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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) เพิ่มสมาชิก ตัวเข้าถึง ความสัมพันธ์ระดับเดียวกัน ความสอดคล้องกับโพรโทคอล หรือส่วนขยายให้กับชนิดข้อมูล การขยายทั้งหมดเกิดขึ้นขณะคอมไพล์
เรียนรู้ Swift ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 122
- บทเรียน
- 409
คำถามที่พบบ่อย
บทเรียน “บทบาทของมาโคร: แบบอิสระและแบบแนบ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “บทบาทของมาโคร: แบบอิสระและแบบแนบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “บทบาทของมาโคร: แบบอิสระและแบบแนบ”
ทำความเข้าใจมาโคร #expression และบทบาทของมาโคร @attached แบบ peer/member/accessor คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “บทบาทของมาโคร: แบบอิสระและแบบแนบ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- บทบาทของมาโคร: แบบอิสระและแบบแนบ
- เขียนมาโครนิพจน์แบบอิสระ
- มาโครสมาชิกแบบแนบเพื่อลดโค้ดสำเร็จรูป
- การทดสอบและแก้จุดบกพร่องมาโคร