![](https://fxstudio.dev/wp-content/uploads/2019/09/feature_bg_3-1170x628.jpg)
Tổng hợp về Protocol & Closure trong iOS
iOS & Swift . TutorialsContents
Chào bạn đến với Fx Studio. Đây là bài viết tổng hợp các kiến thức về Protocol & Closure. Giúp cho các bạn mới bắt đầu lập trình thì dễ dàng hiểu và tiếp cận một cách nhanh chóng hơn. Okay! …
Bắt đầu thôi!
Chuẩn bị
-
- Xcode 12
- iOS 13.x
- Swift 5.x
Ở trên chỉ là cấu hình đề xuất của mình cho bạn khi tìm hiểu về Protocol & Closure mà thôi. Còn thực tế, bạn cần sử dụng các version với Swift 3.x trở lên. Vì bản chất chúng không thay đổi gì nhiều từ cái thời đó. Ngoài ra, bạn cần phải có thêm kiến thức căn bản của ngôn ngữ lập trình Swift.
1. Giới thiệu
1.1. Protocol
Sơ lược về định nghĩa Protocol là như sau:
-
- Là một kiểu interface
- Mang tính chất trừu tượng
- Khai báo các properties và các methods
- Không định nghĩa chúng
- Implement được vào class/struct/enum
- Implement được vào nhiều chứ không phải một
- Có thể xem như là 1 kiểu dữ liệu
Và bạn sẽ tìm hiểu đầy đủ hơn tại bài viết này: Protocol trong 10 phút
1.2. Closure
Closure là một block code, có thể tách ra để tái sử dụng. Hiểu đơn giản hơn thì Closure là function, nhưng khuyết danh. Ta có thể gán Closure vào biến và sử dụng như các kiểu value khác.
- Các điểm cần chú ý:
- block code
- function
- khuyết danh
- biến
Và bạn sẽ tìm hiểu đầy đủ hơn tại bài viết này: Closure trong 10 phút
2. Áp dụng
Sau đây, mình sẽ liệt kê những trường hợp mà bạn có thể áp dụng được một cách triệt để Protocol & Closure. Và đó là những vấn đề hết sức cơ bản trong lập trình iOS.
2.1. Custom View
- Custom View là tạo ra các UI Control mới, để cho giao diện ứng dụng theo đúng với thiết kế giao diện của ứng dụng iOS.
- Các thiết kế giao diện thường sẽ phức tạp và không sử dụng các UI Control cơ bản.
Ta sẽ áp dụng Protocol vào việc truyền tải dữ liệu (Passing Data) từ Custom View về ViewController. Chi tiết hướng dẫn bạn xem ở link dưới đây:
2.2. TableView
Bạn chỉ cần thành thạo TableView là thành thạo lập trình iOS.
Đây một trong những UI Control huyền thoại của iOS. Và đi kèm với TableView là các Delegate & Datasource Protocol của nó, mà bạn bắt buộc phải sử dụng được. Mẫu thiết kế Protocol này được dùng cho hầu hết các UI Control còn lại, như: CollectionView, PickerView, MapView …
Chi tiết về bài viết này thì bạn có thể xem ở link dưới đây:
2.3. Delegation Pattern
Bài viết trong link dưới đây sẽ giải thích cụ thể việc áp dụng Protocol trong vấn đề Passing Data. Với cái tên Delegate & Datasource thì bạn sẽ quen thuộc nhiều hơn. Cũng là một trong những skill bạn cần phải đạt được.
2.4. MVVM
Đây là mô hình được sử dụng nhiều nhất cho iOS Project hiện nay. Chúng ta không đi vào phân tích cấu trúc của MVVM, mà tập trung vào ứng dụng của Closure cho mô hình này. Closure phát huy rất hiệu quả trong việc thực hiện Callback từ ViewModel cho View/ViewController biết.
Đây cũng là một trong những kĩ thuật cơ bản mà một dev iOS bắt buộc phải làm được. Bạn có thể đọc về nó tại link dưới đây:
2.5. Connect Networking & Core API
Đây là một trong những áp dụng kinh điển của Closure. Thế mạnh của Closure chính là xử lý bất đồng bộ. Và sẽ được áp dụng vào việc tương tác với API từ app. Bạn có thể theo dõi lại qua hai bài viết cơ bản dưới đây:
3. Phân biệt
Phần thứ ba này, chúng ta sẽ tìm hiểu các bài viết phân tích sự giống nhau và khác nhau của hai thế lực Protocol & Closure này.
3.1. Passing Data
Việc truyền dữ liệu đi (Passing Data) không lúc nào đều đơn giản cả. Bạn cần nắm được các cách sử dụng Protocol & Closure trong việc xử lý những vấn đề tương đồng trong việc truyền dữ liệu. Từ đó, bạn sẽ thấy được các điểm giống nhau của 2 phương pháp này.
Chi tiết bài viết ở link dưới đây:
3.2. Asynchronous
Từ vấn đề Bất đồng bộ, chúng ta sẽ thấy được sự khác biệt giữa Protocol & Closure. Với từng cách giải quyết chúng ta cần phải lưu ý từng vấn đề thuộc về bản chất của mỗi loại. Khi đó, bạn sẽ dễ dàng đọc code của những người khác, của những thư viện … có áp dụng Protocol & Closure vào xử lý bất đồng bộ.
Để bạn thoát khỏi cảnh phải code một cách máy móc, thì bạn có thể tham khảo link bài viết dưới đây:
3.3. Delegates vs. Closure Callback
Cuối cùng, chúng ta sẽ biết lúc nào lựa chọn Delegate hay Closure. Ưu & nhược điểm mỗi lại. Tại bài viết dưới đây, mình cũng đã tổng hợp được các trường hợp hay gặp phải trong quá trình lập trình iOS.
Tạm kết
Qua trên, bạn sẽ có được cái nhìn tổng quát về Protocol & Closure trong lập trình iOS. Đây cũng là chính là vấn đề chung cho một bạn newbie khi mới vào dự án. Hi vọng bài viết này sẽ giúp ích được cho bạn.
Okay! Tới đây thì mình xin kết thúc bài viết này. Nếu có gì thắc mắc hay góp ý cho mình thì bạn có thể để lại bình luận hoặc gởi email theo trang Contact.
Cảm ơn bạn đã đọc bài viết này!
Related Posts:
Written by chuotfx
Hãy ngồi xuống, uống miếng bánh và ăn miếng trà. Chúng ta cùng nhau đàm đạo về đời, về code nhóe!
Leave a Reply Cancel reply
Fan page
Tags
Recent Posts
- Complete Concurrency với Swift 6
- 300 Bài code thiếu nhi bằng Python – Ebook
- Builder Pattern trong 10 phút
- Observer Pattern trong 10 phút
- Memento Pattern trong 10 phút
- Strategy Pattern trong 10 phút
- Automatic Reference Counting (ARC) trong 10 phút
- Autoresizing Masks trong 10 phút
- Regular Expression (Regex) trong Swift
- Lập trình hướng giao thức (POP) với Swift
You may also like:
Archives
- July 2024 (1)
- June 2024 (1)
- May 2024 (4)
- April 2024 (2)
- March 2024 (5)
- January 2024 (4)
- February 2023 (1)
- January 2023 (2)
- November 2022 (2)
- October 2022 (1)
- September 2022 (5)
- August 2022 (6)
- July 2022 (7)
- June 2022 (8)
- May 2022 (5)
- April 2022 (1)
- March 2022 (3)
- February 2022 (5)
- January 2022 (4)
- December 2021 (6)
- November 2021 (8)
- October 2021 (8)
- September 2021 (8)
- August 2021 (8)
- July 2021 (9)
- June 2021 (8)
- May 2021 (7)
- April 2021 (11)
- March 2021 (12)
- February 2021 (3)
- January 2021 (3)
- December 2020 (3)
- November 2020 (9)
- October 2020 (7)
- September 2020 (17)
- August 2020 (1)
- July 2020 (3)
- June 2020 (1)
- May 2020 (2)
- April 2020 (3)
- March 2020 (20)
- February 2020 (5)
- January 2020 (2)
- December 2019 (12)
- November 2019 (12)
- October 2019 (19)
- September 2019 (17)
- August 2019 (10)