• Đều có chung mục đích là xử lý callback cho một object. Closure có cú pháp ngắn gọn, có thể dùng luôn khi khởi tạo object. Còn delegate là 1 pattern, sử dụng protocol để thực thi callback.
  • Delegates nhóm các callback về một nơi, còn closure tách biệt mỗi object sẽ có 1 callback riêng.
  • Nên dùng Closure thay vì Delegate

    Delegate phải khai báo protocol và vì không có optional methods nên phải implement tất cả cả method.
    Nếu có nhiều delegates thì code sẽ trở nên phức tạp, khó quản lý

  • Các ngôn ngữ lập trình Objective-C và swift đều là ngôn ngữ hướng giao thức (protocol), nên ngày trước core của các thư viện đều dùng delegate là phổ biến. Nhưng giờ apple bắt đầu chuyển đổi sang dùng closure, UIAlertController là một ví dụ, closure được dùng để thực thi callback cho action.
  • Tuỳ vào các đối tượng cụ thể mà sử dụng delegate hay closure, apple đã rất linh hoạt trong việc sử dụng. Như UITableView việc dùng delegate là thích hợp nhất cho việc khai báo datasource.