0
0
Lập trình
Admin Team
Admin Teamtechmely

Hướng Dẫn Chi Tiết về Async/Await trong Swift: Lập Trình Bất Đồng Bộ Đơn Giản Hơn

Đăng vào 4 ngày trước

• 5 phút đọc

Hướng Dẫn Chi Tiết về Async/Await trong Swift

Trong lĩnh vực phát triển ứng dụng iOS, việc làm việc với các tác vụ bất đồng bộ thường mang lại nhiều thách thức, đặc biệt khi phải quản lý callback và xử lý lỗi. Kể từ phiên bản Swift 5.5, ngôn ngữ lập trình Swift đã tích hợp async/await, một phương pháp mới giúp xử lý các tác vụ bất đồng bộ một cách đơn giản và hiệu quả hơn.

Tài Liệu Tham Khảo về Swift

1. Async/Await là gì?

  • Async/Await đại diện cho một mô hình lập trình bất đồng bộ, cho phép bạn xây dựng mã như là tuần tự, ngay cả khi các tác vụ đang diễn ra đồng thời.
  • Thay vì dựa vào callback hay closure như các phương pháp truyền thống, bạn có thể sử dụng từ khóa async để ký hiệu một hàm là bất đồng bộ, và từ khóa await để chờ đợi kết quả từ một tác vụ bất đồng bộ mà không gây tắc nghẽn đến luồng chính.

2. Cú Pháp Cơ Bản

  • async: Đánh dấu một hàm là bất đồng bộ.
  • await: Tạm dừng thực thi cho đến khi có kết quả từ một tác vụ bất đồng bộ và tiếp tục các dòng mã tiếp theo theo cách đồng bộ.
swift Copy
// Hàm bất đồng bộ để lấy dữ liệu từ URL
func fetchData() async throws -> Data {
    let url = URL(string: "https://api.example.com/data")!
    let (data, _) = try await URLSession.shared.data(from: url)
    return data
}

// Hàm bất đồng bộ để xử lý dữ liệu
func processData() async {
    do {
        let data = try await fetchData() // Chờ kết quả từ fetchData()
        let processedData = process(data) // Tiếp tục thực hiện dòng mã này một cách đồng bộ
        print(processedData)
    } catch {
        print("Lỗi: \(error)")
    }
}

Trong ví dụ trên, hàm fetchData() được đánh dấu là bất đồng bộ với từ khóa async, và await được sử dụng để chờ đợi kết quả từ URLSession.shared.data(from:). Kết quả sau đó được truyền vào hàm process() để xử lý.

Một số quy tắc cơ bản của async/await:

  • Các hàm đồng bộ (Synchronous) không thể gọi trực tiếp các hàm bất đồng bộ.
  • Các hàm bất đồng bộ có thể gọi các hàm bất đồng bộ khác và cũng có thể gọi các hàm đồng bộ bình thường.
  • Nếu có sự tương đồng trong cách gọi hàm giữa các hàm đồng bộ và bất đồng bộ, Swift sẽ dựa vào ngữ cảnh để xác định cách gọi.

3. Ưu và Nhược điểm của Async/Await

Ưu điểm:

  • Mã Sạch và Dễ Hiểu: Giúp loại bỏ callback hell, cải thiện độ dễ đọc và dễ hiểu của mã.
  • Quản Lý Lỗi Dễ Dàng: Việc xử lý lỗi trong các tác vụ bất đồng bộ trở nên đơn giản hơn với từ khóa try, catch, và throws.
  • Hiệu Suất Cải Thiện: Tối ưu hóa việc sử dụng luồng và tài nguyên, giúp tăng cường hiệu suất của ứng dụng.

Nhược điểm:

  • Hạn Chế Ở Một Số Trường Hợp: Async/Await có thể không thích hợp cho những tình huống yêu cầu quản lý nhiều tác vụ bất đồng bộ đồng thời.

4. Sử Dụng Async/Await để Lấy Dữ Liệu từ REST API

Việc giao tiếp với các REST API là rất quan trọng trong phát triển ứng dụng di động. Sử dụng async/await trong Swift giúp đơn giản hóa quá trình này.

Đầu tiên, bạn cần một hàm để gửi yêu cầu đến REST API và nhận dữ liệu trả về. Dưới đây là cách dùng URLSession để thực hiện yêu cầu mạng.

swift Copy
// Hàm bất đồng bộ để lấy dữ liệu từ REST API
func fetchDataFromAPI() async throws -> [String: Any] {
    let url = URL(string: "https://api.example.com/data")!
    let (data, _) = try await URLSession.shared.data(from: url)
    let json = try JSONSerialization.jsonObject(with: data) as! [String: Any]
    return json
}

Trong đoạn mã này:

  • URL được sử dụng để xác định địa chỉ của API bạn muốn truy vấn.
  • URLSession.shared.data(from:) được dùng để gửi yêu cầu và nhận dữ liệu từ API. Hàm này là bất đồng bộ và được gọi nhờ từ khóa await.
  • Kết quả trả về là dữ liệu từ API, được chuyển đổi thành một đối tượng từ điển [String: Any].

Tiếp theo, bạn có thể gọi hàm này trong một hàm bất đồng bộ khác và xử lý kết quả một cách đồng bộ:

swift Copy
// Hàm bất đồng bộ xử lý dữ liệu từ API
func processDataFromAPI() async {
    do {
        let jsonData = try await fetchDataFromAPI() // Chờ kết quả từ fetchDataFromAPI()
        // Xử lý dữ liệu ở đây
        print(jsonData)
    } catch {
        print("Lỗi: \(error)")
    }
}

Trong hàm processDataFromAPI():

  • Hàm fetchDataFromAPI() được gọi để lấy dữ liệu từ API. Hàm này sử dụng từ khóa await, và mã phía sau chỉ được thực thi sau khi có kết quả từ API.
  • Dữ liệu trả về từ API được lưu trữ trong biến jsonData, và bạn có thể xử lý nó một cách đồng bộ trong phần tiếp theo của hàm.

Sử dụng async/await giúp việc lấy dữ liệu từ REST API trở nên dễ dàng và linh hoạt hơn, nhờ vào việc loại bỏ các callback phức tạp và cải thiện tính sáng sủa của mã.

Async/Await là một tính năng mạnh mẽ trong ngôn ngữ Swift, mở ra nhiều khả năng mới cho việc xử lý các tác vụ bất đồng bộ. Hãy bắt đầu tích hợp async/await vào dự án của bạn và cảm nhận sự khác biệt mà nó mang lại!

Hẹn gặp lại các bạn trong bài viết kế tiếp!
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào