Swift Academy · บทเรียน

เชื่อม Result เข้ากับ async/await

แปลง API ของ Result ที่อาศัยการเรียกกลับให้เป็นฟังก์ชัน async ที่โยนข้อผิดพลาดได้

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

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

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

ส่วนติดต่อแบบใช้การเรียกกลับแบบเดิมจะคืนค่า `Result` ส่วนโค้ดสมัยใหม่ใช้ async/await การเชื่อมระหว่างสองรูปแบบเป็นงานที่พบได้บ่อย และ Swift มีรูปแบบที่สะอาดสำหรับการเชื่อมได้ทั้งสองทิศทาง

withCheckedThrowingContinuation

```swift func fetchAsync(url: URL) async throws -> Data { try await withCheckedThrowingContinuation { cont in fetchCallback(url) { result in cont.resume(with: result) } } } ``` `cont.resume(with: result)` ยอมรับ `Result` ได้โดยตรง

withCheckedContinuation (ไม่โยนข้อผิดพลาด)

```swift func fetchAsync(url: URL) async -> Result { await withCheckedContinuation { cont in fetchCallback(url) { result in cont.resume(returning: result) } } } ```

การแปลงงานแบบอะซิงโครนัสเป็น Result

```swift func asResult(of operation: () async throws -> T) async -> Result { do { return .success(try await operation()) } catch { return .failure(error) } } let r = await asResult { try await fetch(url) } ```

`Result.get()` ในบริบทอะซิงโครนัส

```swift func process() async { let result: Result = await fetchAsync(url) do { let data = try result.get() handle(data) } catch { handle(error) } } ```

`Task { }` สำหรับการเชื่อม

```swift func load() { Task { let data = try await fetchAsync(url) await MainActor.run { self.render(data) } } } ```

AsyncStream จากการเรียกกลับ

```swift func events() -> AsyncStream { AsyncStream { cont in let token = subscribe { event in cont.yield(event) } cont.onTermination = { _ in unsubscribe(token) } } } ```

กฎความปลอดภัยของการสานต่อ

• เรียก `resume` เพียงครั้งเดียวเท่านั้น — การเรียกซ้ำสองครั้งจะทำให้เกิดพฤติกรรมที่ไม่กำหนด • อย่าเรียก `resume` หลังจากฟังก์ชันส่งค่ากลับแล้ว • ใช้ `withCheckedContinuation` ในโหมดดีบักเพื่อให้ตรวจพบข้อผิดพลาด และใช้ `withUnsafeContinuation` ในรุ่นเผยแพร่หากจำเป็นต้องเพิ่มประสิทธิภาพ

MainActor สำหรับการอัปเดตส่วนติดต่อผู้ใช้

```swift await MainActor.run { label.text = data.description } // or: @MainActor func updateUI(_ d: Data) { label.text = ... } await updateUI(data) ```

การทดสอบแบบอะซิงก์และผลลัพธ์

```swift func testFetch() async throws { let result = await asResult { try await fetchAsync(url) } switch result { case .success(let d): XCTAssertFalse(d.isEmpty) case .failure(let e): XCTFail(e.localizedDescription) } } ```

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

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

สรุปทบทวน

ประเด็นสำคัญ: • `withCheckedThrowingContinuation` เชื่อมการเรียกกลับเข้ากับ async throws • `cont.resume(with: result)` รับค่า Result ได้โดยตรง • ห่อหุ้ม `async throws` ไว้ใน Result ด้วยฟังก์ชันช่วย • เรียก `resume` เพียงครั้งเดียวเท่านั้น • ใช้ `MainActor.run { }` เพื่ออัปเดตส่วนติดต่อผู้ใช้อย่างปลอดภัยจากบริบทอะซิงก์ จบบทเรียนแล้ว! ถัดไป: พื้นฐาน SwiftUI
เริ่มต้นได้ฟรี

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

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

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

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

บทเรียน “เชื่อม Result เข้ากับ async/await” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “เชื่อม Result เข้ากับ async/await”

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

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

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

บทเรียน “เชื่อม Result เข้ากับ async/await” ใช้เวลานานแค่ไหน

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

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

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

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

  1. พื้นฐาน Result
  2. map และ flatMap บน Result
  3. ชนิดข้อผิดพลาดแบบกำหนดเองด้วย LocalizedError
  4. เชื่อม Result เข้ากับ async/await
← กลับไปที่ Swift Academy