Why protocols? Ví dụ từ UITableView
TIL
491
swift
45
ios
35
White

Cuong Pham viết ngày 16/06/2017

(Dịch từ cuốn ebook đang học, đoạn này lý thuyết quan trọng cần dịch tử tế và lưu lại)

Giả sử bạn đang bắt đầu mở một doanh nghiệp. Bạn bảo một thằng design thiết kế logo công ty. Thằng đó là thằng có kĩ năng có thể tạo được bất kì loại logo nào. Nhưng nó không thể bắt đầu việc này ngay. Ít nhất, bạn cần phải cung cấp cho nó một vài yêu cầu như là tên công ty, màu branding, bản chất doanh nghiệp để nó có thể tạo logo. Tuy nhiên, bạn rất bận. Bạn ủy quyền task cho trợ lý cá nhân, và để cho nó deal với thằng designer, cung cấp cho thằng đó các yêu cầu logo.

Trong lập trình iOS, UITableView class giống như thằng design. Nó đủ linh động để hiển thị nhiều loại data khác nhau (image, text...) trong table form. Bạn có thể sử dụng nó để hiển thị một list các nước hoặc danh bạ.

Nhưng trước khi UITableView có thể hiển thị data cho bạn, nó yêu cầu ai đó cung cấp vài thông tin cơ bản như:

  • Có bao nhiêu hàng bạn muốn hiển thị trong table view?
  • Data của bảng là gì? Ví dụ, bạn muốn hiển thị những gì ở dòng 2? Hoặc ở dòng 5?

"Ai đó" được hiểu là delegate object. Trong ví dụ trên, trợ lý cá nhân chính là delegate object. Trong lập trình iOS, nó cũng ứng dụng khái niệm của việc delegate thường được gọi là delegation pattern. Một object dựa trên một object khác để thực hiện một task cụ thể. Trong trường hợp này, ViewController sẽ là delegate cung cấp data của bảng.

Vậy làm thế nào để cho UITableView biết data để hiển thị? UITableViewDataSource protocol chính là chìa khóa. Nó là liên kết giữa data của bạn và table view. Protocol này định nghĩa một list các method mà bạn có phải tuân theo. Đây là 2 requried method của UITableViewDataSource protocol:

  • tableView(_:numberOfRowsInSection:)
  • tableView(_:cellForRowAtIndexPath:)

Tất cả bạn cần là cung cấp 1 object thực thi các method trên, từ đó UITableView biết cổng số hàng để hiển thị và data của mỗi hàng. Protocol này cũng định nghĩa vài method tùy chọn mà chúng ta không bàn đến ở đây.

Mặt khác UITableViewDelegate protocol làm việc với diện mạo của UITableView. Tất cả các method được định nghĩa trong protocol là tùy chọn. Chúng để bạn quản lý chiều cao của một hàng, chỉnh sửa section heading và footer, sắp xếp lại table cell, blah blah.

tuancuong92 09-06-2017

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Cuong Pham

11 bài viết.
0 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
7 1
Về cơ bản có 2 cách sử dụng Resolve/Reject trong Promise của Javascript: Sử dụng hàm static của class Promise: return Promise.reject() & return P...
Cuong Pham viết 8 tháng trước
7 1
White
3 0
Generate Swagger API File to HTML Site Slate rất hay nhưng muốn gen từ Swagger API thì rất là lằng nhằng và tool convert có vẻ như tác giả không s...
Cuong Pham viết 10 tháng trước
3 0
White
2 0
Test elasticsearch search keyword Elasticsearch là một db hỗ trợ tìm kiếm mạnh mẽ, nhưng đi kèm với nó là phải phân tích query và keyword. Analyz...
Cuong Pham viết 11 tháng trước
2 0
Bài viết liên quan
White
11 4
(Link) (Link) (Link) Ở 2 phần tut trước, mình đã hướng dẫn khá chi tiết cách viết một ứng dụng camera có tích hợp chức năng nhận diện khuôn mặ...
HoangPH viết hơn 2 năm trước
11 4
White
18 1
Toán tử XOR có tính chất: + A XOR A = 0 + 0 XOR A = A Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về runtime, và với O(1)...
kiennt viết hơn 1 năm trước
18 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
11 bài viết.
0 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!