Swift Academy · บทเรียน

ค่าที่ฉายด้วย $binding

เปิดเผย projectedValue เพื่อเพิ่มความสามารถผ่านคำนำหน้า $

บทเรียน 2 จาก 412 ขั้นตอน

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

ยินดีต้อนรับ

ค่าที่ฉาย (เข้าถึงผ่าน `$`) จะมอบอินเทอร์เฟซรองให้กับตัวห่อหุ้มพร็อพเพอร์ตี โดย `@State` และ `@Published` ของ SwiftUI ใช้เพื่อเปิดเผย `Binding` และ `Publisher`

การเพิ่ม projectedValue

```swift @propertyWrapper struct Toggle { var wrappedValue: Bool = false var projectedValue: String { wrappedValue ? "ON" : "OFF" } } struct Model { @Toggle var active } var m = Model() print(m.$active) // "OFF" — projected value accessed with $ ```

ชนิดของ projectedValue

ค่าที่ฉายสามารถเป็นชนิดใดก็ได้ เช่น `Binding` `Publisher` `String` หรือชนิดที่กำหนดเอง `@State` ของ SwiftUI จะฉาย `Binding` ซึ่งช่วยให้การไหลของข้อมูลเป็นแบบสองทิศทาง

ตัวอย่างการฉายการผูกข้อมูล

```swift // @State projects Binding: @State var isOn = false Toggle(isOn: $isOn) // $isOn is Binding ```

การฉายการผูกข้อมูลแบบกำหนดเอง

```swift @propertyWrapper struct Validated { var wrappedValue: String var projectedValue: Bool { !wrappedValue.isEmpty } } struct Form { @Validated var email = "" } var f = Form() f.email = "hi@example.com" print(f.$email) // true — projected Bool ```

การฉายของ @Published

```swift class VM: ObservableObject { @Published var score = 0 } let vm = VM() let cancellable = vm.$score // Publisher .sink { print("Score: \($0)") } vm.score = 10 // "Score: 10" ```

การเข้าถึง projectedValue ภายในตัวห่อหุ้ม

```swift @propertyWrapper struct History { private var current: T private(set) var projectedValue: [T] = [] var wrappedValue: T { get { current } set { projectedValue.append(current); current = newValue } } init(wrappedValue: T) { current = wrappedValue } } ```

การใช้ตัวห่อหุ้ม History

```swift struct Counter { @History var count = 0 } var c = Counter() c.count = 1; c.count = 5; c.count = 3 print(c.$count) // [0,1,5] — history of old values ```

การแยกความหมายของไวยากรณ์ $

```swift struct Form { @State var text = "" var body: some View { TextField("Enter", text: $text) // $text is Binding } } // text → String (wrappedValue) // $text → Binding (projectedValue) ```

ข้อควรพิจารณาด้านการออกแบบ

• `projectedValue` เป็นทางเลือก ควรเพิ่มเมื่อจำเป็นต้องมีอินเทอร์เฟซรองเท่านั้น • ชนิดของค่าดังกล่าวอาจแตกต่างจาก `wrappedValue` โดยสิ้นเชิง • ใช้ `$` ณ จุดเรียกใช้เพื่อเข้าถึงค่าที่ฉาย • ค่าที่ฉายเหมาะอย่างยิ่งกับตัวเผยแพร่ของ Combine และการผูกข้อมูลของ SwiftUI

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

คุณเข้าถึง `projectedValue` ของตัวห่อหุ้มพร็อพเพอร์ตีได้อย่างไร

ทบทวน

ประเด็นสำคัญ: • `projectedValue` มอบ API รองให้ตัวห่อหุ้มผ่าน `$` • สามารถเป็นชนิดใดก็ได้ เช่น Binding, Publisher, Bool หรือ Array • `@State` จะฉาย `Binding` ส่วน `@Published` จะฉาย `Publisher` • เข้าถึงด้วย `$propertyName` ได้ทั้งใน body และ ณ จุดเรียกใช้ • เพิ่มอินเทอร์เฟซที่สองเฉพาะเมื่อให้ประโยชน์ที่ชัดเจน ถัดไป: @Published และ Combine
เริ่มต้นได้ฟรี

เรียนรู้ Swift ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
122
บทเรียน
409

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

บทเรียน “ค่าที่ฉายด้วย $binding” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ค่าที่ฉายด้วย $binding”

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

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

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

บทเรียน “ค่าที่ฉายด้วย $binding” ใช้เวลานานแค่ไหน

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

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

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

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

  1. สร้างพร็อพเพอร์ตีแรปเปอร์แบบกำหนดเอง
  2. ค่าที่ฉายด้วย $binding
  3. @Published และการสังเกตการณ์ใน Combine
  4. การประกอบพร็อพเพอร์ตีแรปเปอร์หลายรายการ
← กลับไปที่ Swift Academy