Combine Đi Với Giới Từ Gì

  -  

Series Combine đã từng đi được gần một nữa đoạn đường. Bài viết này đang là bài trước tiên đến phần 3 của toàn series. Đó là Combine vs. MVVM. trước hết, bản thân sẽ có một xem xét như thế này:

Phần MVVM của series từ bỏ Fx Studio là đó bản thân Để ý đến với tự phát triển. Có tương đối nhiều những repo bên trên GitHub xuất xắc những bài viết về quy mô MVVM với Combine hoặc cùng với RxSwift. Nên sereis bài viết của Fx Studio chỉ mang tính chất hóa học xem thêm bạn tất cả một chiếc hình tổng quả về MVVM trong quả đât Reactive sầu Programming.

Bạn đang xem: Combine đi với giới từ gì

quý khách đã xem: Combine đi cùng với giới từ gì

Nếu bạn chưa khám phá về Combine Framework thì chúng ta nên đọc qua 2 phần thứ nhất của series.

Còn bạn vẫn biết về nó rồi thì …

Bắt đầu thôi!

Chuẩn bị

Xcode 11.0Swift 5.1iOS 13.0

Quý khách hàng ko bắt buộc quá để tâm đâu. Vì chúng ta có thể tự chế tác 1 project với ban đầu thiết kế đều trang bị đầu số lượng 0. Project chạy thử sẽ sở hữu màn hình thứ nhất là Welcome.

Để có thể linh hoạt độc nhất vô nhị thì bản thân lời khuyên chúng ta nên thực hiện project ko thực hiện Storyboard. Nếu các bạn không biết hoặc đã quên bí quyết chế tạo ra iOS Project không thực hiện storyboard với Xcode 11 thì rất có thể xem links sau:

Vì Xcode 11 với iOS 13 new sử dụng được Combine Framework.

1. MVVM là gì?

Câu hỏi này khá là dư vượt với mình cũng đều có trình bày rõ ràng quy mô MVVM vào iOS ở bài viết sau:

Trong bài viết này, bản thân sẽ không giải thích lại MVVM với công dụng của những yếu tố trong những số đó. Txuất xắc do kia, tại sao bản thân chọn MVVM với Combine?

Đó là …

Quen nằm trong & phổ biến

Đây là 2 yếu tố chủ yếu quyết định.

Quen thuộc bởi hoàn toàn có thể chúng ta bước đầu học tập lập trình sẵn là vẫn tiếp cận cùng với mô hình MVC rồi. Lớn lên 1 tí, các bạn sẽ tiếp cận với mô hình MVVM. Và đó cũng chính là chiếc bạn thực hiện từng ngày lúc thao tác. Quý khách hàng cũng tương tự mình, sẽ không dám đập đi hết code cũ để xuất bản một vật dụng nào đó new.Phổ biến vày lúc này, đâu đâu cũng là MVVM. Cách cấu trúc cùng tổ chức tệp tin. Có khía cạnh trong nhiều ngữ điệu lập trình với nhiền căn cơ hiện giờ.

Đó là dẫn truyện nhằm tới phần tiếp theo của bài xích. MVVM với Combine có gì đặc biệt?

2. MVVM với Combine

Theo như trên thì:

Bình new rượu cũ mà thôi!

2.1. Tư tưởng

Vẫn là MVVM, vẫn là các nhân tố thân thuộc trong các số ấy. Cũng nhỏng những tác dụng với nhiệm vụ cơ mà nhân tố đảm nhiệm. Và chúng ta vẫn thêm giảm một ít, để cho mùi vị thêm đậm đà hơn.

Cái cần chế tạo chính là tứ tưởng. Và tất cả 2 điểm bạn cần chú ý để lưu lại đúng tôn chỉ của bốn tưởng này.

Không cần là Combine

Nghe qua thì vẫn thấy nào đấy sai không nên. Ngay Khi tiêu đề đã là MVVM với Combine rồi. Tuy nhiên, các bạn lưu giữ lại những bài bác trước tiên vào series, thì fan nhiệm kỳ trước của Combine sẽ là RxSwift. Và không ngừng mở rộng hơn nữa đó chính là Reactive sầu Programming.

Đó là loại chủ yếu thứ nhất cần phải cố được cùng duy trì nó xuyên suốt cả project. Mọi thức không hề là các class và đối tượng người sử dụng. Mà đang là Việc vạc với dìm dữ liệu.

Các yếu tố đang tự động hóa biển khơi thay đổi & phản bội ứng lại những tài liệu nhận ra từ bỏ các nguồn phạt. Lúc làm được điều đó, các bạn sẽ không chịu ràng buộc vào Combine tuyệt RxSwift tuyệt bất kể framework làm sao không giống. Và bản thân tin cẩn là chúng ta vẫn hoàn toàn có thể áp dụng mô hình này không những từng iOS nhưng thôi.

Sử dụng được cho các project cũ

Về bản chất Combine vẫn là Framework. Và nó sẽ giải quyết một trong những vụ việc trong không ít vụ việc gặp mặt yêu cầu. Chứ đọng nó không thay thế được không còn cả project. Quý Khách cũng không thích code mới của khách hàng lại tất yêu tái sử dụng vào trong các project khác.

Hoặc bạn với vào mình đầy ước mơ giúp đỡ thế giới này bởi Combine. Và lập cập gửi nó vào trong project của người tiêu dùng. Nhưng bạn có cả một team chục người, ai nấy phương diện cũng đầy ám khí … Mỗi hành động gõ code của công ty đề rất có thể tác động tới sự sống mái sau này của cả team chúng ta.

Vâng vâng … nhiều vụ việc vẫn gây ra. Nếu họ không biết …

Dung hợp thân Combine Code & Non-Combine Code.

Vì vậy, 2 tứ tưởng này sẽ ảnh hưởng tới toàn bộ quy mô MVVM new. Quý Khách cần phải ghi ghi nhớ kĩ với luôn theo đúng.

2.2. Mô hình

Đây là phần chính vào bài xích. Mình gồm nghe 1 câu của một cu cậu trong team mình nói:

Ndở người khẩu ca không bằng một hình hình ảnh.

Xem thêm: Top 10 Homestay Đẹp Ở Phú Quốc Giá Tốt View Đẹp, Top 8 Homestay View Biển Đẹp Nhất Phú Quốc

trước hết đó là sơ đồ vật tổng quát độc nhất của mô hình MVVM với Combine


*

Vẫn là hầu hết từ khoá rất gần gũi. Có thêm vài ba keywords mới, vị nó thuộc tứ tưởng xây dựng Reactive Programming.

ViewỞ phía trên bao hàm luôn luôn cả View & ViewControllerNhiệm vụ vẫn luôn là hiển thị tài liệu và truyền sự kiện người dùng đến ViewModelKhác biệt là câu chữ hiện lên tuỳ thuộc vào tinh thần tài liệu của ViewModelTạo yêu cầu mọt link dữ liệu từ bỏ nguồn phát là ViewModel và vị trí dìm là các ở trong tính của ViewViewModelTrung trung ương quản lý và điều hành thiết yếu của những tế bào hìnhLưu trữ tài liệu. Nhưng tăng cấp việc lưu trữ thành nguồn vạc dữ liệuSetup các state làm phản ứng lại cùng với từng các loại sự kiện/dữ liệu nhận được. Sau kia phân phát đi để View biết được cùng bao gồm làm phản ứng lại từng state nàyModelVẫn như trước đó đâySẽ Combine hoá những function của từng ModelHai vấn đề yêu cầu chú ý là notifygọi back

2.3. Cấu trúc file

Đây là kết cấu ý kiến đề nghị mang lại mô hình MVVM cùng với Combine. quý khách hàng rất có thể tuỳ trở nên theo sở thích và mê man code của riêng các bạn.

Trước tiên chúng ta xem lại hình hình ảnh sau và mình sẽ nói chân thành và ý nghĩa từng thư mục.

AppDelegateAppDelegate.swift : giữ nguyên hiện trạng, là vị trí cai quản cấu hình chung đến thiết bịSceneDelegate.swift : thiết lập cấu hình việc hiển thị mang đến project cùng với rootViewControllerDefineCác struct cùng với những ở trong tính staticCác biến hóa, key, value … dùng làm giữ thông số kỹ thuật và biết tin tầm thường của projectControllersBaseChứ đọng các sub-class kế thừa các Controller cội (nlỗi UIViewController, UINavigationController …)Dùng nhằm cấu hình cùng thiết lập các yếu tắc tầm thường cho những Controller áp dụng trong projectCác tlỗi mục khác là các screen. Đặt tên theo tên màn hình. Trong số đó cóViewControllerGiao diện (*. xib)ViewModelViewsChức các view custom với những sub-class của những UI ControlExtsChẹn các tệp tin extension của những classSử dụng hâụ tố Publisher để hiểu extension này được Combine hoáModelsEntitiesChứa các class/struct/enum … đại diện cho những đối tượng người tiêu dùng sử dụng vào projectAPIPhần core tác động cùng với API/Webservice …ManagersCác Model bọc những giải pháp xử lý liên quan tới một thuộc vấn đề làm sao đóTuỳ thuộc vào mỗi project nhưng sẽ sở hữu được thêm những core khác đạt thêm vàoResourcesImagesFontsMedia (sound, đoạn phim … )…

3. Hoạt động

Quý khách hàng demo coi tứ tưởng của quy mô MVVM mới vẫn áp dụng ra làm sao. Chúng ta đang tò mò trải qua code ví dụ.

3.1. ViewModel

Bạn xem hình nghỉ ngơi biểu hiện WelcomeViewController, thì vẫn thấy cần có những tài liệu cho:

NameAboutTrạng thái đăng nhập

Trước tiên tại thỏng mục Entities, các bạn chế tạo ra một tệp tin tên là User.swift, nlỗi sau:struct User var name: String var about: String var isLogin: BoolCũng hơi là đơn giản, nhưng lại chính là thực thể của chúng ta đã áp dụng cho màn hình Welcome này.

Bước tiếp theo, ta chế tác class ViewModel mang đến màn hình Welcome, cùng với tên là WelcomeViewModelfinal class WelcomeViewModel var user: User //MARK: init init(user: User) Vì những ở trong tính của ViewModel sẽ là ánh xạ của các UI Control bên trên View. Ví dụ như:

Với UILable thì đang là StringVới UITableView thì vẫn là Array

Cái cực nhọc ngơi nghỉ đây là chúng ta bắt buộc lựa chọn thứ hạng dữ liệu cho các trực thuộc tính của ViewModel sao cho bảo đảm an toàn được:

Lưu trữ dữ liệuNguồn phạt dữ liệu

Và kia đó là các Subject. Thực thể đầy quyền lực trong Combine, nhằm liên kết được đối với cả 2 trái đất Combine và Non-Combine Code. quý khách coi demo code new đã thế nào. Đừng quên bài toán import Combine vào class nha.import Foundationimport Combinefinal class WelcomeViewModel //MARK: Properties let name = CurrentValueSubject(nil) let about = CurrentValueSubject(nil) let loginEnabled = CurrentValueSubject(false) let errorText = CurrentValueSubject(nil) var user: User //MARK: init init(user: User) Các CurrentValueSubject có:

Lưu trữ được dữ liệuCó mục đích như là một trong PublisherSẽ hưởng thụ dữ liệu thời điểm khởi tạoKhi 1 subscriber subscribe cho tới thì đã nhận thấy ngay lập tức dữ liệu

Ta có thêm phần dữ liệu mang đến error. Cái này là giả tưởng thôi, cho thêm phần nhộn nhịp.

Tiếp tục hoàn thành xong function init của ViewModel với dữ liệu trường đoản cú tđắm đuối số.init(user: User) self.user = user Quý Khách sẽ xong xuôi phần thiết lập cơ bạn dạng cho việc lưu trữ của ViewModel.

3.2. State

Đây là khái niệm new xuất hiện thêm trong quy mô MVVM truyền thống lịch sử. Do đối tượng người dùng chúng ta quyên tâm từ bây giờ chính là dữ liệu. Mọi hành vi cùng thay đổi trên bối cảnh đầy đủ phải nhờ theo trạng thái của dữ liệu.

ViewModel là vị trí triệu tập việc lưu trữ dữ liệu. Đồng thời sẽ vạc đi những tín hiện tại về tinh thần của dữ liệu đang lưu trữ. Từ đó View sẽ sở hữu được hầu như hành vi tương ứng. Các hành do kia sẽ tiến hành setup cùng mình vẫn trình bày tại phần dưới. Còn bây giờ họ triệu tập Việc khai báo các State vào ViewModel.

Tiếp tục cùng với tệp tin WelcomeViewModel, thêm đoạn code sau để quan niệm các State của chính nó.enum State case initial case error(message: String) Trong code ví dụ này chúng ta knhì báo 2 tâm trạng trước tiên là

initial đến khởi sinh sản của ViewModelerror mang lại trường thích hợp bao gồm lỗi, dùng để làm show Alert thông báo cho tất cả những người dùng biết

quý khách thấy bạn cũng có thể thêm các tham số vào những case của enum. Đó đó là điều từ bỏ hào với ngữ điệu Swift đã cho chính mình thêm tương đối nhiều khí giới. Và cuối cùng chúng ta cũng có thể thêm những case của riêng biệt bản thân vào kia (ví dụ : fetched giành riêng cho câu hỏi gọi API xong).

Sang phần thực hiện những State trong ViewModel của doanh nghiệp. quý khách thêm 1 function sau vào vào class ViewModel. Lưu ý đề nghị khai báo private, bởi phần này là nội bộ ViewModel chém nhẹm thịt lẫn nhau thôi.private func processState(_ state: State) switch state case .initial: name.value = user.name about.value = user.about loginEnabled.value = user.isLogin errorText.value = nil case .error(let message): errorText.value = message Function này đã cách xử lý từng ngôi trường đúng theo của State. Với mỗi ngôi trường phù hợp bọn họ gồm thể:

Ttuyệt thay đổi tài liệu lưu lại trữHotline những request cho tới các ModelThực hiện tại một trong những hành độngTiến hành điều phối mang lại View

Tại bên trên, bạn sẽ xong xuôi phần thiết đặt mang đến State chừ tới việc thực hiện. Vấn đề của bọn họ là đề xuất dữ đúng tư tưởng của Combine. Nên vấn đề biến hóa những State cũng nên do một Publisher đưa ra quyết định. Lựa lựa chọn bậc nhất vẫn là Subject. Mở tệp tin WelcomeViewModel, bạn thêm knhị báo sau vào vào class:

Output đầu ra là giao diện StateFailure là Never

let state = CurrentValueSubject(.initial)Subject state này sẽ chịu trách rưới nhiệm câu hỏi biến đổi tâm trạng tài liệu của ViewModel. Và cũng tương tự tứ tưởng của Combine thì bạn cần phải setup các làm phản ứng lại Publisher này. Chúng ta đã chọn function init để tiến hành câu hỏi này.init(user: User) self.user = user //subscriptions _ = state.sink(receiveValue: state in self?.processState(state) ) Vì state là Publisher đề nghị đơn giản và dễ dàng là chúng ta subscription tới nó. Tại closure của sink các bạn Điện thoại tư vấn function processState. OKE, bạn đang dứt phần State, giờ xúc tiến phần tiếp theo sau làm sao.

3.3. Actions

Đây cũng là 1 trong những có mang bắt đầu được cung cấp mô hình MVVM này. Trước đây, câu hỏi cách xử trí hành động của người tiêu dùng thì chỉ với các lời call hàm liên tiếp nhau qua các lớp.

View —> IBkích hoạt —> ViewModel —> function —> Model

Và thật là trở ngại Khi cần qua cho tới 3 giỏi 4 lớp. Rồi sự việc cách xử trí phản hồi sau khi đang tiến hành dứt trách nhiệm …

Tất nhiên, nó vẫn còn đó, không tồn tại gì không đúng tuyệt cần phải thay đổi ở đây. Nhưng ta trong thời điểm tạm thời ko áp dụng giải pháp này. Chúng ta cũng cần chuyển tư tưởng của Combine vào.

Các sự kiện của người tiêu dùng thì cũng được xem là luồng tài liệu sự không tương đồng bộCần tất cả một Publisher để phân phát đi những sự khiếu nại nàyViệc giải pháp xử lý các sự kiện này đã tuỳ nằm trong vào tài liệu của Publisher cảm nhận cơ mà thực thi.

Do kia, họ trọn vẹn rất có thể knhị báo & setup không còn các phản bội ứng lại những sự kiện người tiêu dùng. Và gạt bỏ việc áp dụng những đối tượng người sử dụng nghỉ ngơi những lớp nhằm hotline lẫn nhau và giải pháp xử lý Điện thoại tư vấn back.

Xem thêm: Khoảng Cách Từ Sân Bay Cam Ranh Đến Ninh Thuận Bao Xa, Cách Di Chuyển Từ Sân Bay Cam Ranh Đến Ninh Thuận

Tiếp theo, thêm function để xử lý các tâm lý của Action. Tạm thời họ đã print nó ra thôi.private func processAction(_ action: Action) switch action case .gotoHome: print("gokhổng lồ HomeVC") case .gotoLogin: print("golớn LoginVC") Và quý phái phần subscribe Action nhằm gọi function xử lý nó. Và họ đang knhị báo ngơi nghỉ init, địa điểm triệu tập của quả đât vnạp năng lượng minch.init(user: User) self.user = user //subscriptions _ = state.sink(receiveValue: state in self?.processState(state) ) _ = action.sink(receiveValue: action in self?.processAction(action) ) Action cũng giống như như State, cũng không có gì cạnh tranh phát âm tại chỗ này. Chúc mừng bạn đã ngừng phần setup ViewModel cùng tùy chỉnh cấu hình những phản nghịch ứng lại cùng với những Publisher.

3.4. View

View = View + UIViewController

Đây là phần biến tấu bao gồm, kịch xuất xắc ban đầu ở chỗ này. Quý Khách thường xuyên với thông số kỹ thuật View. Đầu tiên, họ khai báo những IBOutlet của View. //MARK: Outlets Chuyên ổn mục: Tin Tức