Thay thế ủy quyền bằng kết hợp trong Swift 5

Tram Ho

Getting Started

Hãy xem xét hai màn hình sau:

Trên màn hình đầu tiên, hiển thị một danh sách các mục. Khi nhấn vào nút “Thêm mục”, màn hình thứ hai sẽ hiển thị, cho phép thêm các mục mới.
Cách tiếp cận truyền thống để thực hiện như sau:

ItemsViewController

Như ta đã thấy, bên trong hàm addButtonTapped(sender:), chúng ta tạo AddItemViewController và gán self cho thuộc tính delegate của nó

Thông qua AddItemViewControllerDelegate để lấy thông tin của item mới thêm vào và cập nhật vào tableView.

AddItemViewController

Ở đây, trong hàm doneButtonTapped(sender:), chúng ta sẽ chạy delegate didAddItem(item:) và dismiss viewController.

Làm cách nào để nó có thể đơn giản hơn? Điều gì sẽ xảy ra nếu chúng ta không cần bất cứ delegate protocol nào mà vẫn có thể theo dõi sự cập nhật thêm item mới bên trong ItemsViewController

Combine’s publishers and observers sẽ giúp chúng ta làm điều này

Using Combine

Đầu tiên hãy xóa bỏ AddItemViewControllerDelegate và tạo ra PassthroughSubject có kiểu String:

Có thể thấy ở đây, chúng ta đã gửi 1 giá trị mới vào newItem bên trong hàm doneButtonTapped(sender:).

Bây giờ AddItemViewController đã có 1 publisher hợp lệ, chúng ta có thể subcribe nó bên trong ItemViewController

Khi một giá trị mới được gửi vào chủ thể newItem bên trong AddItemViewController, chúng ta cập nhật tableView bên trong toán tử .handleEvents.

Lưu ý rằng để ngăn subcription bị giải phóng ngay lập tức, hãy tạo thuộc tính subcription để lưu trữ đăng ký của chúng ta.

Cuối cùng chúng ta đã có thể thay thế cách tiếp cận delegate truyền thống bằng Combine.

Xem thêm về Combine: https://developer.apple.com/documentation/combine

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo