Nối tiếp những bài trước về chủ đề lập trình hướng đối tượng trong Swift. Hôm nay mình sẽ hướng dẫn bạn một kỹ thuật mới để làm việc với class. Đó là kỹ thuật mở rộng class bằng Extension.


Extension là gì


Extensions cho phép bạn bổ sung thêm chức năng mới cho class, struct, hoặc enum hiện có mà không cần phải viết lại (kể cả khi bạn không có mã nguồn).

Đặc điểm của Extension trong Swift

Extensions trong Swift có một số đặc điểm như sau:

  • Bổ sung thêm các thuộc tính tính toán vào một class hiện có.
  • Thêm các phương thức (Instance Methods & Type Methods) vào một class có sẵn.
  • Thêm một số cách để khởi tạo đối tượng (Initializer).
  • Cho phép bổ sung thêm subscripts.
  • Cài đặt một giao thức (protocol).

Cú pháp khai báo Extension

Bạn khai báo extension tương tự như khai báo class, cú pháp như sau:
Extension trong SwiftVí dụ: Để cho bạn dễ hình dung, mình sẽ khai báo extention bổ sung thêm các thuộc tính cho phép đổi đơn vị sang hệ m cho kiểu Double của hệ thống.
Extension trong SwiftBạn hãy lưu ý, Double là kiểu dữ liệu có sẵn của hệ thống, chúng ta hoàn toàn không có source của kiểu này. Nhưng nhờ Extension mà chúng ta có thể bổ sung thêm các thuộc tính cho kiểu Double. Như ví dụ trên, mình bổ sung thêm các thuộc tính cho phép chuyển đổi đơn vị chiều dài khác sang hệ m (met).

Sử dụng Extension

Cách thức sử dụng extension cũng tương tự như việc bạn sử dụng một class nào đó. Bạn có thể dùng dấu “.” để truy xuất các thành phần được bổ sung thêm trong extension.

Ví dụ: Mình áp dụng luôn extension Double đã xây dựng trong ví dụ trước nhé.
Extension trong SwiftTrong ví dụ trên, mình đổi số 25.4 có đơn vị là mm sang m và số 3 có đơn vị là ft sang m. Bạn cần nhớ là extension chỉ là nhiệm vụ là bổ sung thêm chứ không “ghi đè” nhé. Vì vậy mà những thuộc tính hoặc các phương thức khác của Double vẫn có thể sử dụng bình thường. Rất tiện phải không nào?

Lưu ý: extension chỉ cho phép bổ sung thuộc tính tính toán nhưng không cho phép bổ sung thuộc tính lưu trữ (set giá trị) hoặc theo dõi giá trị (willSet hoặc didSet).

Bổ sung thêm hàm chức năng

Bên cạnh việc bổ sung thuộc tính như trên, extension cũng cho phép bạn bổ sung thêm các hàm chức năng cho một class có sẵn nào đó.

Ví dụ: Bổ sung thêm 03 hàm cho kiểu Double như sau.
Extension trong SwiftNgoài ra, extension cũng hỗ trợ bạn bổ sung thêm phương thức khởi tạo cho một class có sẵn nào đó. Nhưng bạn cần lưu ý là extension chỉ cho phép bổ sung phương thức khởi tạo convenience thôi nhé. Bạn còn nhớ class Rectanglebài viết trước không? Mình sẽ sử dụng extension để bổ sung thêm phương thức khởi tạo cho class Rectangle nhé.
Extension trong Swift


Tổng kết


Thực tế thì extension cũng được sử dụng khá thường xuyên do chúng ta không cần tới source gốc mà vẫn có thể bổ sung chức năng cho một class nào đó. Việc sử dụng extension khá đơn giản nhưng lại rất hiệu quả phải không nào? Vì vậy bạn cũng nên quan tâm tới nó nhé.

Khu vực Thảo luận

Viết bình luận

avatar