Cách thực hiện các ràng buộc API với @available trong Swift

Bài viết này là một mẹo rất nhanh về cách giúp bạn giới hạn code của mình với một số phiên bản hoặc làm cho nó hoàn toàn không khả dụng trong Swift. Ví dụ: khi bạn đang phát triển framework, bạn muốn cập nhật việc call API của mình sử dụng async / await

Bài viết này là một mẹo rất nhanh về cách giúp bạn giới hạn code của mình với một số phiên bản hoặc làm cho nó hoàn toàn không khả dụng trong Swift.

Ví dụ: khi bạn đang phát triển framework, bạn muốn cập nhật việc call API của mình sử dụng async / await chỉ tương thích với iOS 15 trở lên. Điều này có thể được thực hiện bằng cách sử dụng available API.

Vấn đề

Bạn đang phát triển một framework nhưng cần giới hạn một số phần của nó với phiên bản iOS hoặc cao hơn. Và cần làm cho một phần khác của code hoàn toàn không khả dụng.

Hãy cùng xem ví dụ dưới đây:

classExternalFramework{publicfuncaddByTwo(value:Int)->Int{printTwo()return value +2}privatefuncprintTwo(){print("2")}}

Code rất đơn giản. Chỉ là một lớp ExternalFramework làm ví dụ về framework ngoài và hai chức năng. Cái đầu tiên trả về Integer và là public và cái thứ hai chỉ cần in “2” trong console.

Hãy hạn chế việc sử dụng chức năng addByTwo chỉ dành cho iOS 15 trở lên bằng cách sử dụng available. Xem hình bên dưới:

Tiếp tục khám phá từng thuộc tính chú thích.

Thuộc tính Deprecated

Nếu bạn muốn cảnh báo người dùng của mình rằng API này không còn được dùng cho iOS 11 trở lên, bạn chỉ cần thêm cái này:

@available(iOS, deprecated:11)publicfuncaddByTwo(value:Int)->Int{printTwo()return value +2}

Kết quả là người gọi nhận được cảnh báo khi cố gắng sử dụng hàm:

Thuộc tính Message

Thuộc tính message bạn phải sử dụng với thuộc tính deprecated. Để gửi thông báo cho những người sử dụng API cũ rằng có điều gì đó đã thay đổi và cách họ có thể cập nhật những thay đổi.

@available(iOS, deprecated:11, message:"Use at your own risk")publicfuncaddByTwo(value:Int)->Int{printTwo()return value +2}

Thuộc tính Introduced

Khi bạn muốn hạn chế khả năng sử dụng chức năng với @available, về cơ bản, bạn cần cung cấp hai thứ về cơ bản: platform và version được hỗ trợ tối thiểu.

@available(platform name, platform version)

Ví dụ: nếu bạn muốn rằng chức năng của bạn chỉ hoạt động trong iOS 12 trở lên. Bạn có thể làm được việc này:

@available(iOS, introduced:12)publicfuncaddByTwo(value:Int)->Int{printTwo()return value +2}

Bằng cách này, bạn có thể giới hạn những người có thể sử dụng chức năng của bạn. Nhưng điều gì sẽ xảy ra nếu bạn cố gắng sử dụng một phương pháp mà phiên bản iOS của bạn không tương thích?

Xcode cung cấp cho bạn ba lựa chọn thay thế cho điều này.Việc đầu tiên là thực hiện kiểm tra #avaliable:

let externalFramework =ExternalFramework()if#available(iOS 15,*){
    externalFramework.addByTwo(value:100)}else{// Fallback on earlier versions}

Phương thức thứ hai : sử dụng @available(iOS 15, ) vào phương thức gọi của hàm externalFramework.addByTwo.
Và cách cuối là bạn thêm @available(iOS 15, ) vào đầu class đó

Thuộc tính Renamed

Khi bạn cần một API framework để thay đổi tên, chỉ cần thêm thuộc tính đã đổi tên vào một hàm deprecated như sau:

@available(iOS, deprecated:11, renamed:"addByForSureTwo")publicfuncaddByTwo(value:Int)->Int{printTwo()return value +2}

Xcode rất tiện dụng khi bạn sử dụng điều này vì nó đã đề xuất sửa thành phương thức mới, ngay cả khi phương thức đó không tồn tại.

Thuộc tính Unavailable

Và thuộc tính cuối cùng, nếu bạn không muốn người dùng của mình sử dụng API, thuộc tính này là dành cho bạn! Bạn thậm chí có thể hiển thị một thông báo cho người dùng.

@available(iOS, unavailable, message:"This API will be supported and could not be used anymore")publicfuncaddByTwo(value:Int)->Int{printTwo()return value +2}

Kết luận

Luôn luôn tốt nếu biết các lựa chọn thay thế để viết API tuyệt vời.
Hi vọng qua bài viết này sẽ giúp bạn tạo ra các đoạn code hoàn hảo và bảo mật.

Nguồn: https://holyswift.app/how-to-do-apis-constraints-with-available-in-swift

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ