0Pricing
Swift Academy · บทเรียน

แพ็กเกจภายในเครื่องและโมดูลฟีเจอร์

แยกฟีเจอร์เป็นแพ็กเกจ Swift ภายในเครื่องเพื่อให้บิลด์เร็วขึ้นและแยกส่วนได้ดีขึ้น

แพ็กเกจภายในเครื่องและโมดูลฟีเจอร์ เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงต้องมีโมดูลฟีเจอร์

การแบ่งแอปออกเป็นแพ็กเกจภายในเครื่องช่วยบังคับใช้การห่อหุ้ม ทำให้การสร้างแบบเพิ่มทีละส่วนเร็วขึ้น และช่วยให้ทีมทำงานคู่ขนานกันได้

// Without modules: one giant target recompiles everything
// With modules: changes to FeatureA only recompile FeatureA

การสร้างแพ็กเกจภายในเครื่อง

สร้างไดเรกทอรีถัดจากโครงการ Xcode แล้วเรียกใช้ swift package init ภายในไดเรกทอรีนั้น

mkdir Features/UserProfile
cd Features/UserProfile
swift package init --name UserProfile --type library

การเพิ่มลงในโครงการ Xcode

ลากไดเรกทอรีแพ็กเกจภายในเครื่องไปไว้ในตัวนำทางโครงการของ Xcode โดย Xcode จะตรวจพบว่าเป็นแพ็กเกจ SPM โดยอัตโนมัติ

// In Xcode:
// File → Add Package Dependencies → Add Local...
// Select the package directory

การอ้างอิงแพ็กเกจภายในเครื่อง

ใน Package.swift ของแอป หรือผ่าน Xcode ให้อ้างอิงแพ็กเกจภายในเครื่องด้วย .package(path:)

.package(path: "../Features/UserProfile"),
// In the target:
.product(name: "UserProfile", package: "UserProfile")

พื้นผิวส่วนติดต่อสาธารณะ

เฉพาะการประกาศ public และ open ในแพ็กเกจภายในเครื่องเท่านั้นที่แอปจะเข้าถึงได้ ใช้การควบคุมการเข้าถึงเพื่อกำหนดขอบเขตของโมดูล

// UserProfile/Sources/UserProfile/ProfileView.swift
public struct ProfileView: View {
  public init() {}
  public var body: some View { Text("Profile") }
}

การนำไปใช้งานภายใน

ชนิด internal ทั้งหมดจะมองไม่เห็นจากภายนอกโมดูล ทำให้เกิดการห่อหุ้มโดยอัตโนมัติ

// Only visible within UserProfile module:
final class ProfileCache { ... }
struct ProfileMapper { ... }

โครงสร้างโมดูลฟีเจอร์

โมดูลฟีเจอร์แต่ละโมดูลเป็นเจ้าของชั้นโดเมน ข้อมูล และการนำเสนอของตนเองภายในโมดูล

// UserProfile/
// ├── Sources/UserProfile/
// │   ├── Domain/         (entities, use cases, protocols)
// │   ├── Data/           (repositories)
// │   └── Presentation/   (views, view models)
// └── Tests/UserProfileTests/

โมดูลแกนกลางที่ใช้ร่วมกัน

สกัดประเด็นที่ตัดข้ามหลายส่วน เช่น การสื่อสารเครือข่าย การวิเคราะห์ข้อมูล และระบบการออกแบบ ไปไว้ในโมดูลที่ใช้ร่วมกันซึ่งโมดูลฟีเจอร์นำเข้า

// CoreNetwork package
// CoreDesign package
// Both imported by FeatureA and FeatureB

กราฟการพึ่งพา

โมดูลฟีเจอร์ไม่ควรพึ่งพากันโดยตรง การพึ่งพาที่ใช้ร่วมกันควรไหลผ่านโมดูลแกนกลางเพื่อหลีกเลี่ยงการผูกติดกัน

// GOOD:
// FeatureA → CoreNetwork
// FeatureB → CoreNetwork
// BAD:
// FeatureA → FeatureB  (tight coupling)

ประโยชน์ด้านเวลาการสร้าง

เมื่อมีขอบเขตโมดูลที่ชัดเจน Xcode จะสร้างเฉพาะโมดูลที่ได้รับผลกระทบใหม่เมื่อไฟล์ต้นฉบับเปลี่ยนแปลง

// Change in UserProfile → only UserProfile recompiles
// App target links the new binary → fast incremental build

การทดสอบโมดูลฟีเจอร์

โมดูลฟีเจอร์แต่ละโมดูลมีเป้าหมายการทดสอบของตนเอง ทำให้ดำเนินการทดสอบคู่ขนานกันได้และทำให้การผสานรวมอย่างต่อเนื่องรวดเร็วขึ้น

// Run all tests:
swift test --package-path Features/UserProfile
// Or let Xcode run them as part of the main test plan

ตรวจสอบความเข้าใจอย่างรวดเร็ว

การประกาศในแพ็กเกจสวิฟต์ภายในเครื่องต้องมีระดับการเข้าถึงใดจึงจะนำไปใช้จากเป้าหมายแอปได้

สรุปบทเรียน

สร้างแพ็กเกจฟีเจอร์ภายในเครื่องด้วย swift package init อ้างอิงด้วย .package(path:) และเปิดเผยเฉพาะชนิด public เท่านั้น สกัดยูทิลิตีที่ใช้ร่วมกันไปไว้ในโมดูลแกนกลาง โมดูลฟีเจอร์ไม่ควรพึ่งพากันเอง ขอบเขตโมดูลที่สะอาดช่วยลดเวลาการสร้างแบบเพิ่มทีละส่วนได้อย่างมาก

คำถามที่พบบ่อย

บทเรียน “แพ็กเกจภายในเครื่องและโมดูลฟีเจอร์” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “แพ็กเกจภายในเครื่องและโมดูลฟีเจอร์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “แพ็กเกจภายในเครื่องและโมดูลฟีเจอร์”

แยกฟีเจอร์เป็นแพ็กเกจ Swift ภายในเครื่องเพื่อให้บิลด์เร็วขึ้นและแยกส่วนได้ดีขึ้น คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “แพ็กเกจภายในเครื่องและโมดูลฟีเจอร์” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Package.swift: เป้าหมาย ผลิตภัณฑ์ และการพึ่งพา
  2. แพ็กเกจภายในเครื่องและโมดูลฟีเจอร์
  3. เป้าหมายไบนารีและ XCFrameworks
  4. การกำหนดเวอร์ชัน การแก้ข้อขัดแย้ง และปลั๊กอิน Swift
← กลับไปที่ Swift Academy