Dùng Swift Extensions như thế nào?

Swift Extensions

Như chúng ta đã biết (cũng như dành cho những ai chưa biết), Swift là ngôn ngữ lập trình mới được Apple phát triển trong 4 năm, bây giờ đã lên tới version 2.0 rồi đấy.

Hôm nay chúng ta sẽ tìm hiểu một chút về một kỹ thuật khá là “bá” với Swift. Đó là Extensions.

Swift Extensions là gì?

Extensions (hay gọi nôm na là “phần mở rộng”) cho phép chúng ta thêm những phương thức (method) mới vào một lớp (class) có sẵn, mà không cần tạo một lớp kế thừa. Swift Extensions giống như Categories trong Objective-C, nhưng ngắn gọn hơn và mạnh mẽ hơn nhiều :).

Vậy khi nào thì cần dùng Extensions?

  1. Tình huống cơ bản và thông dụng nhất là khi ta muốn thêm phương thức (Instance Methods & Type Methods) vào một class có sẵn.
  2. Cung cấp thêm một số cách để khởi tạo đối tượng (Initializer).
  3. Đáp ứng thêm một hoặc nhiều giao thức (Adapt Protocol).
  4. Thêm các thuộc tính tính toán (Computed properties).
  5. Mở rộng giao thức (Protocol) – New in Swift 2.0.

Ok! Viết nhiêu đó là thấy hấp dẫn rồi, thực hành tý để biết nó hoạt động thế nào nhé, phương châm của Silicon Straits bọn mình là Learn by doing mà.

(Lưu ý một chút là tất cả ví dụ được viết trên Xcode 7, Swift 2.0 đó nha!)

1. Thêm phương thức vào một class có sẵn

Khai báo Extension: giờ ta sẽ tạo Extension cho class NSDate.

Xong rồi, rất đơn giản hen, y chang như khai báo class :).

Giờ ta sẽ thêm phương thức mới cho class NSDate thông qua Extensions.

Phương thức của một class có hai loại: Instance Methods & Type Methods

Bắt đầu với Instance Method trước:

Xài thử xem sao:

Giờ ta viết thêm Type Method:

Test thử:

2. Cung cấp thêm một số cách để khởi tạo đối tượng

Giờ ta thử nhìn vào đoạn code bên dưới một chút:

Đoạn code này giúp ta khởi tạo một đối tượng UIColor, từ bốn chỉ số Red – Green – Blue – Alpha

Bạn có để ý là nó dài dòng quá không? Mình là mình thấy quá dài luôn, mà lại không hỗ trợ mã Hexa nữa.

OK! Viết thêm vào nào:

Test thử nào:

Giờ thì ngon rồi nhé, ngắn gọn và dễ hiểu, hỗ trợ cả Hex nhé :)

3. Đáp ứng thêm một hoặc nhiều giao thức (Protocol)

Chắc các bạn còn nhớ hai protocol thông dụng của UITableView  chứ, đó là UITableViewDataSource  và UITableViewDelegate.

 Theo cách bình thường, ta sẽ viết như sau:

Ôi, lại dài rồi, tất cả phương thức dồn hết vào một class thế này thì sau này đọc lại cũng mệt ah.

Giờ thử dùng Extensions để giải quyết:

Yeah! Giờ thì phần code để implement UITableViewDataSource  và UITableViewDelegate  protocol đã được tách riêng ra rồi. Nhìn rất clean và đẹp phải ko! :)

4. Thêm các thuộc tính tính toán (Computed properties)

Computed Properties là những thuộc tính được tạo thành từ function, function sẽ được gọi khi ta access vào property đó.

Trong Swift, ta sử dụng {get set}  để tạo Computed properties. Ví dụ nhé:

Chúng ta vừa thêm một Computed Property kiểu int: lấy giá trị chính nó nhân cho 2:

Về cơ bản, Extensions không cho phép thêm các thuộc tính lưu trữ (variable), nhưng ta có thể sử dụng các Computed Properties như trên để tạo nên 1 thuộc tính lưu trữ thực sự.

Magic là đây!! Hãy xem nhé:

Giờ ta sẽ khai báo 1 class gọi là Object để thử nghiệm.

Chúng ta sẽ thêm một Computed Property gọi là linkedObject với đầy đủ {get set}  method, và sử dụng associatedObject để lưu trữ giá trị thực sự.

Xài thử xem nào:

Siêu cool phải không!!!

5. Mở rộng giao thức

Từ phiên bản 2.0, Swift Extensions có thêm “sức mạnh” mới… đó là mở rộng được cả Protocol.

Giờ chúng ta lấy một common Protocol CustomStringConvertible để làm “chuột bạch” nhé.

Làm rồi thì phải xài thử chứ nhỉ :D

Do StringInt đều adapt protocol CustomStringConvertible nên ta có thể thoải mái sử dụng nhé :D

Không chỉ StringInt mà tất cả những class nào adapt protocol CustomStringConvertible đều có thể gọi dc phương thức mà chúng ta mới thêm vào.

Tạm kết:

Với Swift Extensions, chúng ta có thể mở rộng gần như không giới hạn class có sẵn, mà không cần phải kế thừa hoặc chỉnh sửa source code gốc. Rất hữu ích trong việc viết những thư viện, hoặc những Utility (như extension của UIColor chẳng hạn).

SSS Full-stack Engineer

Love Silicon Straits and want to know more about our company culture, working environment or job vacancies?
Find out more at careers.siliconstraits.vn.

Silicon Straits
Be Challenged. Be Inspired. Be Different.




Posted by

on September 29, 2015

in

Comments

Follow us for more later

or subscribe with