Delegation trong IOS

Delegation là gì

Trong số design patterns được dùng phổ biến trong việc phát triển ứng dụng IOS, delegation là một trong số design patterns mà chúng ta thường thấy xuất hiện khá nhiều.

Trong bài viết này , mình sẽ giúp các bạn giải đáp câu hỏi Delegation là gì ?? Nào hãy cùng mình làm sáng tỏ câu hỏi đó.

Delegation Xét đến từ “delegation”. Có 3 điều mình nghĩ đến : 1 . Động từ “delegate”, có nghĩa là “kiểm soát”. 2. Danh từ “a delegate” có nghĩa là “một người hành động cho người khác”. 3. Danh từ đã được tạo ra “a delegator”, hoặc đúng hơn là người đứng đầu nghĩa là “một người uỷ thác việc gì đó cho người khác”.

Trong thực tế , từ delegation đóng gói mối quan hệ và trách nhiệm . Một delegator / người đứng đầu sẽ ủy quyền việc kiểm soát hoặc công việc cho người khác gọi là delegate .

Chúng ta đang làm việc với thể hiện của class (hoặc các cấu trúc dữ liệu khác như structs, nhưng mình sẽ để nó đơn giản và nói class để gói gọn ý tưởng). Đối với delegation xảy ra trong phần mềm, bạn sẽ có một tình huống mà một class (a delegator / class chính) sẽ phân quyền kiểm soát hoặc công việc, ở đây có nghĩa là logic hành vi, đến class khác được gọi là delegate.

Delegation được sử dụng như thế nào ?? Đúc kết lại delegation là dạng design pattern là một trong số được Apple chấp nhận và dùng phổ biến với các API của iOS. Nó dùng để chuyển công việc từ class này sang class khác, qua đó tạo ra sự tách biệt giữa công việc và những thứ liên quan. Nhưng những công việc hay những thứ liên quan đó là gì? Delegation được sử dụng trong thực tế như thế nào?

Communication

Trong thực tế , delegation thường được sử dụng như một cách để một class giao tiếp với class khác. Quan sát một số hành vi mà delegate thực hiện từ API của Apple cho chúng ta những thông tin về việc này. Lấy ví dụ sau đây từ UITableViewDelegate :

  • tableView(_:willSelectRowAtIndexPath:)
  • tableView(_:didSelectRowAtIndexPath:)
  • tableView(_:didHighlightRowAtIndexPath:)

Hoặc mẫu từ UIScrollViewDelegate :

  • scrollViewDidScroll(_
  • scrollViewWillBeginDragging(_
  • scrollViewWillEndDragging(_:withVelocity:targetContentOffset:)
  • scrollViewDidEndDragging(_:willDecelerate:)

Quan sát của mình về các API của Apple chỉ ra rằng một trong những mục đích sử dụng cho delegation là cho phép một thể hiện giao tiếp qua lại với một số thể hiện khác . TableView hoặc ScrollView delegates cho cơ hội để thực hiện một số hành động để đáp ứng một số sự kiện vòng đời tới một class khác.

Customization

Lợi ích phổ biến khác cho delegation là cung cấp cho một thể hiện delegate để tuỳ chỉnh các khía cạnh nhất định bên trong của delegate. Những thông tin mà một vài API của Apple đã làm sáng tỏ tình huống sử dụng này. Hãy nhìn vào UITableViewDelegate đầu tiên:

  • tableView(_:heightForRowAtIndexPath:)
  • tableView(_:editActionsForRowAtIndexPath:)
  • tableView(_:indentationLevelForRowAtIndexPath:)
  • tableView(_:shouldHighlightRowAtIndexPath:)

Đây là 1 số tuỳ chỉnh mà UITableView cho ta hiểu hơn về delegate . Một số phương thức rất quan trọng mà table view không thể hiển thị chính nó, trừ khi nó nhận được thông tin này từ delegates của nó. Vấn đề ở đây là table view chuyển công việc thực hiện logic đó cho delegates của nó, cho phép kiểm soát và tùy chỉnh linh hoạt hơn.

Tóm Lại : Với việc sử dụng delegation là một cách được sử dụng rất phổ biến để tổ chức logic cho ứng dụng iOS. Trong bài này, mình đã giải cố gắng làm sáng tỏ các thuật ngữ “delegation” cho những bạn mới. Cuối cùng, theo mình thì việc sử dụng cho delegation ưu tiên cho việc giao tiếp giữa các class và tuỳ biến 1 chức năng nào đó.

Thanks you for watching .